Autor Beitrag
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Mo 23.02.09 20:37 
Hi!

Ich habe in meinem Porgramm verschiedene Komponenten, u.a.:

- TListBox
- TTreeView

Ich möchte diese beiden Komponenten mit einer Grafik hinterlegen, die dann auch noch beim Scrollen "stabil" bleibt, sich also nicht bewegt (ähnlich wie bei Webhintegruünden, die sich nicht mit dem Text bewegen).

Kann ich das bewerkstelligen? Wenn ja, wie?

Die Grafiken, die ich dafür benutzen möchte, liegen derzeit im Format *.png vor.

Ich wäre euch dankbar für ein paar Tipps, denn ich weiß momentan nicht, wonach ich suchen soll. Komponenten zeichnen hat als Suchbegriff nicht wirklich geholfen.

MfG

Terra

_________________
Hasta La Victoria Siempre
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 23.02.09 21:36 
Hallo,

das TreeView kannst du im OnCustomDraw bemalen, allerdings kenne ich mich damit nicht so aus. Alternativ könntest du die Virtual Treeviews verwenden, da kannst du gleich ein Hintergrundbild angeben.

Die ListBox könntest du auch mit den Virtual Treeviews realisieren, sonst fällt mir da gerade keine Möglichkeit ein.

Grüße,
Yogu
Hobby-Programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 238
Erhaltene Danke: 4

Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
BeitragVerfasst: Mo 23.02.09 21:41 
www.delphi-forum.de/...treeview+hintergrund oder such einfach nach Komponente + Hintergrund
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 24.02.09 19:59 
Hi!

Also ich habe es inzwischen geschafft, eine ListBox meiner Wahl mit nem Hintergrundbild zu füllen.

Die Probleme, die sich dabei ergeben sind:

- Der Text ist nicht mehr zu sehen.
- Wenn ich in die ListBox klicke, dann sehe ich zwar den entsprechenden Eintrag, aber das Bild verschwindet an der Stelle.
- Wenn ich scrolle verschwindet das Bild und bleibt nicht stehen.

Hat jemand ne Idee?

Eine andere, vielleicht banale Idee, die ich hatte, ist folgende:

Ich lege einfach ein TImage hinter die ListBox und mache die ListBox durchsichtig. Allerdings weiß ich nicht, wie das gehen soll und die Suche hilft mir nicht weiter. Ich suche schon seit 45 Minuten und so langsam vergeht mir der Spaß.

Terra

_________________
Hasta La Victoria Siempre
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 24.02.09 20:27 
Tut mir wirklich leid, dass ich dir in diesem Themenbereich nicht wirklich weiterhelfen kann, ich hab einfach noch nicht damit gearbeitet. Allerdings kann ich dir sagen, dass das:

user profile iconTerra23 hat folgendes geschrieben Zum zitierten Posting springen:
Eine andere, vielleicht banale Idee, die ich hatte, ist folgende:

Ich lege einfach ein TImage hinter die ListBox und mache die ListBox durchsichtig. Allerdings weiß ich nicht, wie das gehen soll und die Suche hilft mir nicht weiter.

Nicht funktionierten wird. Eine ListBox ist vom Typ TWinControl, und die können nun mal nicht durchsichtig werden. Punkt. Das ist von Windows so bestimmt (ich weiß zwar nicht, wie es mit Aero unter Vista aussieht, das ist jetzt allerdings nicht von Belang). Du musst wohl oder übel "hinter" den Text der ListBox zeichnen.

Etwas konkreter zu deinem Problem: Es sieht so aus, als hättest du
  1. nicht alle OnPaint-Ereignisse gehookt (heißt einfach, dass du nicht immer dein Bild zeichnest, wenn die Listbox gezeichnet werden soll), und
  2. die eigentlichen Zeichenmethoden der Listbox überschreibst (deshalb ist der Text nicht sichtbar), sie jedoch nicht mehr aufrufst
Dass das Bild mitscrollt könnte auch mit Punkt 1 zusammhängen, da ja nur die neuen Zeilen neu gezeichnet werden; die übrigen jedoch einfach "nach oben geschoben" werden.

Grüße,
Yogu
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 24.02.09 20:32 
Aber was kann ich dagegen tun? Das Ereignis OnScroll oder so gibt es ja nun nicht. Des Weiteren scheine ich es ja nicht zu schaffen, das Bild HINTER den Text zu malen, denn immerhin ist der Text ja nicht sichtbar.

Terra

_________________
Hasta La Victoria Siempre
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 24.02.09 21:27 
Also zumindest eine ListView hatte schon von sich aus diese Möglichkeit, die aber leider nicht in der Delphikomponente verfügbar ist.
Das geht mit der Botschaft LVM_SETBKIMAGE:
msdn.microsoft.com/e...ibrary/bb761155.aspx
Wie das dann aussieht, siehst du hier in VB:
vbnet.mvps.org/index...ctl/lvbackground.htm

Die VirtualTreeView Komponenten kann man komplett anpassen wie man es gerne hätte. Ein Beispiel dafür kannst du hier sehen, das ist komplett selbst gezeichnet:
www.delphi-forum.de/viewtopic.php?t=64090
Später habe ich da noch mehr angepasst.
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 24.02.09 21:34 
Die VirtualTreeView-Komponenten habe ich installiert, aber damit komme ich auch nicht viel weiter.

Meine Programmierkenntnisse beschränken sich halt eher auf ein wenig Code, den ich mir selbst beigebracht oder angelesen habe.

Daher hilft mir aus deinem Post nicht sehr viel weiter, da ich (so banal das klingt), nix kapiere. ;)

Terra

_________________
Hasta La Victoria Siempre
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 24.02.09 21:38 
Na gut, vielleicht hilft dir ein Beispiel mit komplettem Quelltext in Delphi weiter (für die ListView): ;-)
www.delphifaq.com/fa...ndows_GUI/f670.shtml
Ich habe einfach mal nach "delphi LVM_SETBKIMAGE" bei Google kurz gesucht...

Und für die VirtualTreeView ist die von mir verlinkte Anleitung doch recht ausführlich.


Zuletzt bearbeitet von jaenicke am Di 24.02.09 21:39, insgesamt 2-mal bearbeitet
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 24.02.09 21:39 
Mal schauen. Danke für den Link, ich führe mir das mal zu Gemüte.

Terra

_________________
Hasta La Victoria Siempre
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 24.02.09 21:49 
Das funktioniert schon super mit der ListView, allerdings scrollt das Bild immer mit, wenn das Ende erreicht ist. Weißt du, welchen Parameter ich ändern muss, damit das Bild stabil bleibt?

Terra

_________________
Hasta La Victoria Siempre
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 24.02.09 22:48 
Der Dokumentation nach würde ich vermuten LVBKIF_FLAG_TILEOFFSET fehlt noch, vielleicht auch LVBKIF_TYPE_WATERMARK.
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 24.02.09 23:13 
Hab das fertige Programm mal runtergeladen.

Wenn ich den Code Stück für Stück in mein Programm einbaue, dann funktioniert aber nichts. Muss ich mich die Tage nochmal hinsetzen.

Ich bekomme aber immer (!!) ne Beschwerde, dass LVBKIF_SOURCE_MASK beanstandet wird.

Aber wie gesagt: Da muss ich mich mal die Tage hinsetzen und schauen, wie ich das auf meine ListBoxen umschreiben kann.

Terra

_________________
Hasta La Victoria Siempre
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 24.02.09 23:17 
user profile iconTerra23 hat folgendes geschrieben Zum zitierten Posting springen:
Ich bekomme aber immer (!!) ne Beschwerde, dass LVBKIF_SOURCE_MASK beanstandet wird.
Welcher Zahlenwert das ist siehst du ja z.B. in dem VB Quelltext oder auch in den entsprechenden Headerdateien des Windows SDK (3 ;-)).

user profile iconTerra23 hat folgendes geschrieben Zum zitierten Posting springen:
Aber wie gesagt: Da muss ich mich mal die Tage hinsetzen und schauen, wie ich das auf meine ListBoxen umschreiben kann.
Ich glaube nicht, dass das geht, eine ListBox ist keine ListView. Allerdings sieht eine ListView doch fast genauso aus wie eine ListBox, warum muss es denn eine ListBox sein?
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Do 14.05.09 16:40 
So, ich habe nun hier (Klick) bei den Schweizern nen Code gefunden, der ne transparente ListBox erzeugt.

Kann mir jemand von euch sagen, wie ich den Code in meinem Programm aufrufe?

Zuerst habe ich den Code als Unit abgespeichert.

Ich habe dann bei laufendem Programm über das Menü Projekt -> Dem Projekt hinzufügen die Unit in mein Programm aufgenommen.

Aber wie geht es jetzt weiter?

MfG

Terra

_________________
Hasta La Victoria Siempre
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.05.09 16:42 
Du musst die neue Komponente eben auch erzeugen. Entweder manuell bei Turbo Delphi Explorer oder du installierst die Komponente bei anderen Versionen ganz einfach normal.
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Do 14.05.09 16:57 
Sorry, aber wie mache ich das? Kenne mich da überhaupt nicht aus.

Habe nur Delphi 7 installiert.

Terra

_________________
Hasta La Victoria Siempre
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.05.09 18:47 
Unit öffnen, Menü Komponente --> Komponente installieren...
Das war es schon.
Terra23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Do 14.05.09 20:45 
Das habe ich inzwischen gemacht und auch hinbekommen. Leider sieht das nicht sehr toll aus. Beim Scrollen kommen schwarze Felder und wenn ich ein Item anklicken, macht es das Bild hinüber.

Ne Idee, wie ich sowas verhindern kann?

_________________
Hasta La Victoria Siempre
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Do 14.05.09 20:47 
Naja, guck dir halt die entsprechenden Ereignisse an. Onselect oder so zum Beispiel.