Announcement

Collapse
No announcement yet.

Benutzereingabe (Event) verhindern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Benutzereingabe (Event) verhindern

    Hallo,<br>
    ich setze eine Combo-Box ein, bei der nach dem Selektieren eines Eintrages eine bestimmte Funktion ausgeführt wird. Es soll jedoch nur gerade die Funktion ausgeführt werden, die ausgewählt wird. Soweit so gut. Nur wenn der Benutzer mit der Maus scrollt wird jedesmal ein Eintrag ausgewählt, wenn der selektierte Eintrag wechselt. Das heisst, wenn der Benutzer den fünften Eintrag auswählen will und die combobox auf dem ersten steht, dann wird meine Routine "OnChange" viermal aufgerufen, obwohl sie nur den letzten Eintrag abarbeiten sollte. <br>
    Da es auch nicht möglich ist, festzustellen, ob der Benutzer, wenn er auf dem vierten Eintrag ist, mit seiner Auswahl fertig ist, möchte ich das Selektieren gleich ganz verhindern.<br>
    Nun ist es so:<br>
    Wählt der Benutzer einen Eintrag mit einem Mausclick aus, kommt nur ein Event "Change". Das ist auch gut so.<br>
    Scrollt er jedoch mit der Maus so kommt ein "keydown"-Event und ein "Change".<br>
    Nun möchte ich mit dem Keydown-Event die ganze Benutzer-Aktion verhindern, so dass auch die Combobox den Eintrag nicht wechselt. Denn es soll ja auch keine Aktion gemacht werden und die ComboBox soll auf dem ursprünglichen Eintrag stehen bleiben.<br>
    <br>
    Frage: kann ich events verhindern (Combobox wechselt sonst den Eintrag selbstständig und es wird schwierig das rückgängig zu machen)?<br>
    <br>
    Besten Dank für jede Antwort, Thomas

  • #2
    Evtl. ist für dich das Event OnCloseUp interessanter? Dann brauchst Du nur zu reagieren, wenn die Combobox wieder geschlossen wird.<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo Mario,<br>
      dieses Event wäre sehrwahrscheinlich interessant, gibt's jedoch nur im Datenbank-Objekt TDBLookupComboBox.<br>
      Gruss, Thoma

      Comment


      • #4
        ... bei meinem Delphi 6 ist das schon bei der normalen Combobox bei.<p>
        Aber noch eine Anmerkung: Einem so grundsätzlichen Control die Möglichkeiten der Tastatur wegzunehmen ist meiner Meinung nach nicht ganz ohne. Ich gehe einfach mal davon aus, Borland hat das Teil nicht komplett neu entwickelt, sondern dem Windows-Standard entliehen. Somit sollte man eigentlich eher über eine alternative saubere Lösung nachdenken, als das Control zu "vergewaltigen". Wie wäre es denn mit einem kleinen Go-Schalter daneben?<p>
        Das was Du möchtest, erinnert ein wenig an die Funktionalität einer Listbox, die nicht anwählbare Einträge enthält (wird immer wieder in Foren nach der Machbarkein nachgefragt).<p>
        Schöne Grüße, Mario Noac
        Schöne Grüße, Mario

        Comment


        • #5
          Hallo,<br>
          in D5 gibt es das OnCloseUp Event nicht. Obwohl in der unit Messages eine Konstante dafür<br>
          vorgesehen ist. <br>
          Ich würde mir einen Nachfahren von TCustomComboBox erzeugen und dieses Event nachrüsten.<br>
          <pre>
          <font face="verdana" size="1">
          unit JsCustomComboBox
          interface
          uses
          Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
          StdCtrls;
          type
          TJsCustomComboBox = class(TCustomComboBox)
          private
          { Private-Deklarationen }
          FOnCloseUp: TNotifyEvent;
          procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
          protected
          { Protected-Deklarationen }
          procedure DoCloseUp; dynamic;
          public
          { Public-Deklarationen }
          published
          { Published-Deklarationen }
          property Style;
          property Anchors;
          property BiDiMode;
          property Color;
          property Constraints;
          property Ctl3D;
          property DragCursor;
          property DragKind;
          property DragMode;
          property DropDownCount;
          property Enabled;
          property Font;
          property ImeMode;
          property ImeName;
          property ItemHeight;
          property MaxLength;
          property ParentBiDiMode;
          property ParentColor;
          property ParentCtl3D;
          property ParentFont;
          property ParentShowHint;
          property PopupMenu;
          property ShowHint;
          property Sorted;
          property TabOrder;
          property TabStop;
          property Text;
          property Visible;
          property OnChange;
          property OnClick;
          property OnContextPopup;
          property OnDblClick;
          property OnDragDrop;
          property OnDragOver;
          property OnDrawItem;
          property OnDropDown;
          property OnEndDock;
          property OnEndDrag;
          property OnEnter;
          property OnExit;
          property OnKeyDown;
          property OnKeyPress;
          property OnKeyUp;
          property OnMeasureItem;
          property OnStartDock;
          property OnStartDrag;
          property OnCloseUp : TNotifyEvent read FOnCloseUp write FOnCloseUp;
          property Items; { Must be published after OnMeasureItem }
          end;
          procedure Register;
          implementation
          procedure Register;
          begin
          RegisterComponents('Mycomps', [TJsCustomComboBox]);
          end;
          { TJsCustomComboBox }
          procedure TJsCustomComboBox.CNCommand(var Message: TWMCommand);
          begin
          inherited;
          case Message.NotifyCode of
          CBN_CLOSEUP: DoCloseUp;
          end;
          end;
          procedure TJsCustomComboBox.DoCloseUp;
          begin
          If Assigned(FOnCloseUp) then
          FOnCloseUp(Self);
          end;
          end.
          </font>
          </pre&gt

          Comment

          Working...
          X