Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.175 Beiträge
 
Delphi 12 Athens
 
#6

Re: Strg-Taste per Button einrasten!

  Alt 7. Okt 2004, 09:49
hatte ich ja auch gedacht, aber komisch ... vorhin ging es noch, als ich es so hatte:
Delphi-Quellcode:
Procedure TForm1.ListBox1MouseDown ...
  Begin
    Keybd_Event(VK_CONTROL, 0, 0, 0);
  End;

Procedure TForm1.ListBox1MouseUp ...
  Begin
    Keybd_Event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
  End;
Hab's jetzt noch 4, 5-mal versucht und jetzt wills nichtmehr gehn

Na ja, man könnte es ja auch mal vorm Klickereignis machen und dann über'nen Timer wieder abschalten, da es ja kein onMouseLeave bei der Listbox gibt:
Delphi-Quellcode:
  Procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    Begin
      If CheckBox1.Checked Then Begin
        Keybd_Event(VK_CONTROL, 0, 0, 0);
        ListBox1.Tag := 1;
      End;
    End;

  Procedure TForm1.Timer1Timer(Sender: TObject);
    {ein Interval von 10 bis 10 ms reicht voll aus}
    Var P: TPoint;

    Begin
      P := ListBox1.ScreenToClient(Mouse.CursorPos);
      If CheckBox1.Checked and (ListBox1.Tag <> 0) and
        ((P.X < 0) or (P.Y < 0) or (P.X >= ListBox1.Width) or (P.Y >= ListBox1.Height)) Then Begin
        Keybd_Event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
        ListBox1.Tag := 0;
      End;
    End;
mehrfach getestet ^^
Klar, wenn man die Maus nicht bewegt und zwischendurch mal auf 'ne Taste drückt, dann wird gibt es auf diese Weise Probleme -.-''

Die ander Möglichkeit mit 'nem Timer wäre dann
Delphi-Quellcode:
  Procedure TForm1.Timer1Timer(Sender: TObject);
    {ein Interval von 10 bis 10 ms reicht voll aus}
    Var P: TPoint;

    Begin
      If CheckBox1.Checked Then Begin
        P := ListBox1.ScreenToClient(Mouse.CursorPos);
        If (P.X >= 0) and (P.Y >= 0) and (P.X < ListBox1.Width) and (P.Y < ListBox1.Height) Then
          Keybd_Event(VK_CONTROL, 0, 0, 0)
        Else
          Keybd_Event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
      End;
    End;

  Procedure TForm1.CheckBox1Click(Sender: TObject);
    Begin
      If not CheckBox1.Checked Then Keybd_Event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    End;
Dort ist dann das Problem mit dem Drücken einer Taste nicht mehr so groß.

Oder über 'nen Maus-Hook, da sollte es auch möglich sein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat