Autor Beitrag
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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



BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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.
ausblenden 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 22.02.03 12:14 
danke, werd mal suchen gehen

Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Andreas L. Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Sa 22.02.03 13:31 
Danek für die antworten!