![]() |
Eigener Messagehandler
Verwende in meiner Listbox ein Subclassing
Irgendwie ist das aber nicht das wahre. Daher meine Frage wie kann ich einen eigenen MessageHandler erstellen in der TListBox und zusätzlich eigene OnEvents denke ihr wisst was ich meine. Was ich machen möchte ist ein OnPaint MeasureItem OnEraseBkgnd und ein paar andere. Im moment komme ich mit meiner subclass in conflikt mit meiner WinProc von der Mainform. gruss Emil |
Re: Eigener Messagehandler
Was soll deine Listbox können, was die Standard Listbox aus der VCL nicht kann?
Hast du schon auf ![]() |
Re: Eigener Messagehandler
Zitat:
War aber auch nicht die Frage ;) Ich erstelle eine eigene ListBox Transparent mit Vista Aero Funktionalität. (nonvcl) Copy/Paste will ich nicht. EDIT: Also wie kann ich ohne WinProc oder Subclassing einen DefaultHandler für eine nonvcl ListBox erstellen. gruss Emil |
Re: Eigener Messagehandler
Zitat:
Events bereitzustellen, wenn es nicht einmal ein Formular gibt, dass die Eventhandler implementiert? Zitat:
Du musst entweder WinProc für jede einzelne Listbox auf eine eigene Funktion umbiegen. oder du hast eine allgemeine WinProc für alle Listboxen. Mit SetWindowLong(lbhandle,GWL_USERDATA, (ListBoxObject)) kann man einen Zeiger auf ein Objekt in der Listbox speichern. In der allgemeinen WinProc für alle Listboxen liest man mit GetWindowLong die Userdaten aus und castet den Wert in einen Zeiger auf die Listbox-Hilfsklasse:
Delphi-Quellcode:
;
function WindowProcListbox(hwnd:Handle; uMsg:TMsg; wParam, lParam:Cardinal):integer;
var lb : TnonVCLListbox; begin lb := TnonVCLListbox(GetWindowLong(hwnd, GWL_USERDATA)); if Assigned(lb) then begin lb.Handle := hwnd; Result := lb.WinProc(uMsg, wParam, lParam); end else begin // default-Bahandlung, falls kein Objekt in den Userdaten ist end; end Da nun alle Messages auf ein Objekt umgeleitet worden sind, kann man theoretisch von diesem Objekt auch Events auslösen. Aber es macht wenig Sinn, denn es ist einfacher gleich eine Klasse von TnonVCLListbox abzuleiten, die dann die speziellen Aufgaben für eine ganz bestimmte Listbox übernimmt. |
Re: Eigener Messagehandler
Zitat:
Ich habe meine ListBox gesubclassed das ist nicht mein problem. Irgendwie drücke ich mich nicht richtig aus oder werde nicht verstanden. gruss Emil |
Re: Eigener Messagehandler
Du willst das Deine Listbox Klasse selbsttätig auf Events
WM_Paint WM_MeasureItem WM_DrawItem WM_EraseBkgnd etc. reagiert, ohne den Message Handler des Elternfensters zu benutzen? |
Re: Eigener Messagehandler
Zitat:
Man versteht mich nicht.. hat sich erledigt. Danke gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 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