![]() |
Eigene Comobox Verehalten ändern
Hallo,
ich habe mit Hilfe des Internets eine Combobox entwickelt, die meine Layer verwaltet. Vor den Layernamen ist eine An-Aus-Symbol und ein Farbsymbol, um hierüber die Layer zu verändern. Mein Problem ist nun, dass ich diese Icons nur im DropDownFeld erwische, ich möchte das aber auch bei zugeklappter Combobox mit dem Standardeintrag machen. Hat die Combobox noch nicht den Fosus und ich klicke auf den Standardeintrag, dann wird kein WM_LBUTTONDOWN-Ereignis ausgelöst. Kann mir da jemand einen Tip geben? Gruß BBB
Delphi-Quellcode:
tLayerbox = Class(TTNTComboBox)
Private fListInstance: Pointer; fDefListProc: Pointer; BmpLayerOn: TBitmap; BmpLayerOff: TBitmap; BmpLayerGray: TBitmap; Procedure ListWndProc(Var Message: TMessage); Function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer; Function ItemRect(Index: Integer): TRect; Protected Procedure CreateWnd; Override; Procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); Override; Public Procedure Refresh; Constructor Create(AOwner: TComponent); Override; Destructor Destroy; Override; End; Procedure tLayerbox.ListWndProc(Var Message: TMessage); Const cCheckWidth = 20; Var X, Y, Index : Integer; ColorClick : Boolean; AnAusClick : Boolean; FocusAbgeben : Boolean; i : Integer; Begin ColorClick := false; AnAusClick := false; FocusAbgeben := false; Index := 0; If (Message.Msg = WM_LBUTTONDOWN) Or (Message.Msg = WM_RBUTTONDOWN) Then Begin X := TWMMouse(Message).XPos; Y := TWMMouse(Message).YPos; Index := ItemAtPos(Point(X, Y), True); If Index > -1 Then Begin If X - ItemRect(Index).Left < cCheckWidth Then Begin tLayer(Self.Items.Objects[index]).Visible := (Not tLayer(Self.Items.Objects[index]).Visible); AnAusClick := true; FocusAbgeben := (Message.Msg = WM_LBUTTONDOWN); End Else If X - ItemRect(Index).Left < 2 * cCheckWidth Then Begin tLayer(Self.Items.Objects[index]).ChangeColor; ColorClick := True; FocusAbgeben := true; End; End Else // Wenn nicht ins DropDownFeld geklickt wird FocusAbgeben := true; Self.repaint; End; Message.Result := CallWindowProc(FDefListProc, ListHandle, Message.Msg, Message.WParam, Message.LParam); If FocusAbgeben Then Form4.FocusControl(Nil) Else If AnAusClick Then DroppedDown := True; If AnAusClick Or ColorClick Then Form1.Repaint; End; |
Re: Eigene Comobox Verehalten ändern
Eine Lösung habe ich auch nicht, aber das Eingabefeld der Combobox ist ein normales Edit-Control. Eventuell hilft dir das weiter.
|
Re: Eigene Comobox Verehalten ändern
Vieleicht hilft dir OnMouseActivate bzw. WM_MOUSEACTIVATE.
|
Re: Eigene Comobox Verehalten ändern
Also auf WM_MOUSEACTIVATE reagiert er nicht.
Ich will zusätzlich noch das Aufklappen verhindern, wenn auf eines der Symbole geklickt wird. Evtl kann ich das ja verbinden... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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