Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In Nachfahren von TListBox das OndrawItem Ereignis auslösen (https://www.delphipraxis.net/150256-nachfahren-von-tlistbox-das-ondrawitem-ereignis-ausloesen.html)

Jazzman_Marburg 11. Apr 2010 18:05


In Nachfahren von TListBox das OndrawItem Ereignis auslösen
 
Hallo Gemeinde.

Stecke mal wieder im Universum der Ahnungslosigkeit:
Ich brauchte eine ListBox ohne vertikale Scrollbar, und habe dazu einen Nachfahren erzeugt:

Delphi-Quellcode:
TNoVScrolllistbox = CLASS(TListBox)
  PRIVATE
    PROCEDURE WMNCCalcSize( var msg: TMessage ); MESSAGE WM_NCCALCSIZE;
END;

...
MyListBox := TNoVScrolllistbox.create(self);
...
Mit dem entsprechenden Coding (Code zum Verstecken der Scrollbar) konnte ich also die Scrollbar herausoperieren. Soweit prima.

Nun müßte ich auch das Event OnDrawItem meiner neuen MyListBox herankommen (um ihr einen BMP-Background zu verpassen). Mit einer Standard ListBox auf der Form, ging ich dazu bisher in den Objektinspektor und durch einen Doppelklick auf das entsp. Event konnte ich meinen Code einsetzen.

Meine Frage:
Wie macht ich das mit meinem Nachfahren MyListBox, den ich ja erst zur Laufzeit erzeuge?

(Also es geht nicht darum wie ich der ListBox einen enstp. Background einverleibe -- sondern wie ich an das Event OnDrawItem meiner MyListBox herankomme -- ganz so als ob ich im Objektinspektor einen Doppelklick ausführen würde.)

Lieben Dank & Gruß
Jazzman

mkinzler 11. Apr 2010 18:19

Re: In Nachfahren von TListBox das OndrawItem Ereignis auslö
 
Einfach Eventhandler im Code Setzen:
Delphi-Quellcode:
MyListBox.onDrawItem := ...

Jazzman_Marburg 11. Apr 2010 19:25

Re: In Nachfahren von TListBox das OndrawItem Ereignis auslö
 
Hallo.

Ähm, sorry aber das verstehe ich noch nicht ganz. :gruebel:
Wenn ich auf einer Form eine ListBox habe und dann im Objektinspektor für diese ListBox im Event OnDrawItem doppelklicke, dann wir ein Prozedur-Rumpf erzeugt wie dieser:

Delphi-Quellcode:
PROCEDURE TMain_frm.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
BEGIN
  // mein Coding
END;
Dort habe ich mein Coding eingefügt.

Du sagst jetzt:

Zitat:

Zitat von mkinzler
Einfach Eventhandler im Code Setzen:
Delphi-Quellcode:
MyListBox.onDrawItem := ...

Was soll denn dann genau an Stelle von ":= ..." kommen?
Doch nicht das Coding, was ich oben mit "// mein Coding" gekennzeichnet habe, oder?

Wo ist denn die mit dem Objektinspektor erzeugte Prozedur?


Vielen Dank
Jazzman

mkinzler 11. Apr 2010 19:54

Re: In Nachfahren von TListBox das OndrawItem Ereignis auslö
 
Den Namen der Methode, welche beim Event aufgerufen werden soll

Die Methode musst du natürlich vorher anlegen

Delphi-Quellcode:
TMain_frm = class(TForm)
...
  procedure ListBoxDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
...
end;

PROCEDURE TMain_frm.ListBoxDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
BEGIN
...

procedure TMain_frm.FormCreate(Sender: TObject);
begin
    MyListBox := TNoVScrolllistbox.create(self);
    MyListBox.onDrawItem := ListBoxDrawItem;
...
end;

Jazzman_Marburg 11. Apr 2010 20:03

Re: In Nachfahren von TListBox das OndrawItem Ereignis auslö
 
Das hat ein wenig gedauert :wall: aber jetzt habe sogar ich es begriffen :stupid: !

Super - vielen Dank!

Schönen Gruß
Jazzman


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz