Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi eine Aktion solange ausführen, wie Maustaste gedrückt ist (https://www.delphipraxis.net/119225-eine-aktion-solange-ausfuehren-wie-maustaste-gedrueckt-ist.html)

DeddyH 22. Aug 2008 16:03

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
Das hier funktioniert bei mir auch ohne Timer oder Thread.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
    FDown: Boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var Zahl: Cardinal;
begin
  Zahl := 0;
  FDown := true;
  while FDown do
    begin
      inc(Zahl);
      Label1.Caption := Format('%d',[Zahl]);
      Application.ProcessMessages;
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FDown := false;
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FDown := false;
end;

end.

BAMatze 22. Aug 2008 16:05

Re: eine Aktion solange ausführen, wie Maustaste gedrückt is
 
[quote="BAMatze"]
Zitat:

Zitat von kaiser1401
Dann solltest du bei OnMouseDown einen timer starten der in einem gewissen Interwall die gewünscht Aktion ausführt. Im OnMouseUp hälst du ihn dann wieder an. Enabled:=false;

Mit folgenden Prozeduren wurde das Problem gelöst:

Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Timer2.Enabled := true;
end;


procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Timer2.Enabled := false;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Timer2.Interval := (50);
  iErr := MMC_sendCommand('MR100');
end;
Zur Erklärung: Die Zeile iErr := MMC_sendCommand('MR100'); ist eine Befehlszeile zur Steuerung eines Motors. Also die auszuführende Anweisung (solange die Maustaste gedrückt ist), um die es ging.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Seite 2 von 2     12   

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