AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Comobox Verehalten ändern

Ein Thema von Bomberbb · begonnen am 24. Apr 2009 · letzter Beitrag vom 24. Apr 2009
Antwort Antwort
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#1

Eigene Comobox Verehalten ändern

  Alt 24. Apr 2009, 09:34
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Eigene Comobox Verehalten ändern

  Alt 24. Apr 2009, 09:43
Eine Lösung habe ich auch nicht, aber das Eingabefeld der Combobox ist ein normales Edit-Control. Eventuell hilft dir das weiter.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#3

Re: Eigene Comobox Verehalten ändern

  Alt 24. Apr 2009, 10:03
Vieleicht hilft dir OnMouseActivate bzw. WM_MOUSEACTIVATE.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#4

Re: Eigene Comobox Verehalten ändern

  Alt 24. Apr 2009, 10:35
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...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz