| Autor |
Beitrag |
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Fr 21.02.03 16:18
Hi,
wie kann ich einen Hintergrund für eine ListBox machen. Ich hab ein Bild (softprose.bmp) und ich möchte machen das dieses Bild als Hintergrund in der ListBox angezeigt wird!
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Fr 21.02.03 20:56
Hallo
hab ich noch nicht gemacht.
könnte mir das aber so vorstellen: erstmal selber zeichen im Drawitem-ereignis. (Forumsuche) anstatt den Hintergrund des einzelnen Items mit canvas.fillrect zu pinseln, den betreffenden Teil des Bildes zeichnen. Anschließend den Text ausgeben (vor textausgabe canvas.brush.style auf bsclear stellen, damit der Text "durchsichtig wird")
mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Andreas L. 
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Sa 22.02.03 08:04
Danke für die Antwort, leider hat mich dies nicht weitergebracht. Das wäre mir zu umständlich!
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Sa 22.02.03 08:19
| onlinehome hat folgendes geschrieben: | | Danke für die Antwort, leider hat mich dies nicht weitergebracht. Das wäre mir zu umständlich! |
Ist aber die einzige Möglickkeit.
Es wird noch komplizierter. Mit DrawItem hast du nur Zugriff auf die Items mit Werten. Die Items ohne Werte kannst du nur über API ansprechen.
|
|
Andreas L. 
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Sa 22.02.03 08:51
und kann ich da mit der TImage Komponente nicht irgendwie über die ListBox drüber ziehen? Also so, dass das auzssieht als wäre das Image in der ListBox!
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Sa 22.02.03 11:51
Nein, daß geht nicht. Wenn du wüßtest wie das ganze funktioniert, dann würdest diese Frage nicht stellen.
Aber wie gesagt ist es nicht unmöglich ein Bild in den Hintergrund zu legen. Allerdings muß das Bild zerlegt werden und jedes Item einzeln gezeichnet werden.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 22.02.03 11:53
| onlinehome hat folgendes geschrieben: | | Danke für die Antwort, leider hat mich dies nicht weitergebracht. Das wäre mir zu umständlich! |
was ist denn daran so umständlich? im Grunde genommen ist es eine einzige Zeile (copyrect) um den Hintergrund zu zeichnen und schon hast du ein ergebnis.
OK bevort du meckerst, es paßt noch nicht alles (das bild nehm ich von einem Image, keine Fehlerabfragen, Größe der beiden Canvas werden nicht berücksichtigt, und ich hab bei copyrect zweimal das gleiche Rect genommen- das Scrollen wird nicht richtig funktionieren- die 2 rect müssen an die Scrollpos angepaßt werden.) Aber du kannst es ja noch verbessern.
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.FormCreate(Sender: TObject); begin listbox1.style:=lbOwnerDrawFixed; end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with (control as TListbox) do begin //hintergrund, if odselected in State then begin //Item selektiert canvas.brush.color:=clHighlight; canvas.fillrect(rect); end else begin //Item normal //das letzte Item: Hintergrund bis zum Ende der Listbox zeichnen, wird aber nicht immer neu gezeichnet if index=items.count-1 then rect.Bottom:=clientheight; canvas.CopyRect(rect,image1.Canvas,rect); end; //textausgeben canvas.Brush.style := bsclear; canvas.textout(rect.left+1,rect.top+1,items[index]); end; |
| Popov hat folgendes geschrieben: |
Es wird noch komplizierter. Mit DrawItem hast du nur Zugriff auf die Items mit Werten. Die Items ohne Werte kannst du nur über API ansprechen.
|
hast recht, hab erstmal nur das letzte Item bis zum ende der Listbox zeichnen lassen. das wird aber bei einer überlagerung nicht neu gezeichnet.
mit Api kenn ich micjh nicht aus - wie sehe das denn aus ?
Mfg Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Zuletzt bearbeitet von Keldorn am Sa 22.02.03 12:11, insgesamt 1-mal bearbeitet
|
|
Popov
Gast
Erhaltene Danke: 1
|
Verfasst: Sa 22.02.03 12:10
Das hab ich auch mal versucht - ich meine im Hintergrund zeichnen - und festgestellt, daß ich nur über die Items zeichen kann. Ich hab mich da ein wenig informiert und was auf der Swiss Seiten gefunden. Damit kann man auch auf den restlichen Bereich zugreifen. Damals hab ich mir das nur ein einziges mal angeguckt aber nicht angewendet. Wenn du also wissen willst wie das geht, dann such mal auf den Swiss Seiten.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 22.02.03 12:14
danke, werd mal suchen gehen
Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Andreas L. 
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Sa 22.02.03 13:31
|
|