AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Maus klick abfragen - verständnis Problem

Maus klick abfragen - verständnis Problem

Ein Thema von ryLIX · begonnen am 13. Jan 2009 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 14:36
Moin,
folgendes habe ich vor:
Ich möchte, solang einButton gedrückt ist, eine Schleife durchlaufen.
Diese soll verlassen werden wenn der Button nicht mehr gedrückt ist.

Ich hab das ganze nun im OnMouseDown Event.
Nur irgendwie bleibt die Anwendung stehen bzw in der Schleife hängen.
Aber ich weiß grad nich was ich falsch mache.

Delphi-Quellcode:
procedure TForm4.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  while ssleft in shift do
  begin
    'Tu was
end;
end;
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 14:40
Delphi arbeitet die Nachrichtenschleife sequentiell ab, also alle Nachrichten nacheinander.

Also wenn du jetzt verhinderst, daß die OnMouseDown-Nachticht zuende verarbeitet wird, indem zu z.B. eine (Endlos)Schleife da reinbaust, wirst du Probleme bekommen, da dann natürlich alles im Hauptthread an dieser Stelle stoppt.

Lösungen: du könntest z.B. einen Timer, oder einen weiteren Thread in OnMouseDown starten und diesen in OnMouseUp wieder beenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 14:53
Hallo,

eine Lösung hab' ich nicht, aber mir ist schon häufiger aufgefallen, wenn man in einem Programm eine Maustaste drückt und die Maus festhält, bleibt das Programm solange stehen. Das dürfte also kein delphitypisches Problem sein.
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 14:55
Hmm ich mag keine Timer ^^

Hatte gerade an Application.ProcessMessages gedacht.
Aber der Aufruf von Application.ProcessMessages bewirkt nur das die Anwendung nicht stehen bleibt aber die Schleife wird nicht unterbrochen
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 15:03
Hallo

Am einfachsten geht es mit einem TTimer:

Delphi-Quellcode:
procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  // Timer starten
  if Button = mbLeft then
    Timer1.Enabled;
end;

procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  // Timer anhalten
  Timer1.Enabled:= False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Zur Sicherheit abfragen, ob die Maustaste noch gedrückt wird
  if not GetKeyState(VK_LBUTTON) < 0 then
    Timer1.Enabled:= False;

  // Code ausführen...
  Caption := Caption + '%';
end;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 15:03
wie auch, der Parameter kann sich ja nicht durch Zauberhand plötzlich zu einem anderen Wert ändern. Der Wert liegt bei betreten der Mousedownfunktion auf dem Stack und bleibt da bist zum zurückkehren des Events.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 15:06
natürlich wird die Schleife nicht unterbrochen

Shift ist eine Variable, welche kurz vor Aufruf dieser Funktion gesetzt wurde ... du mußt da schon etwas entsprechend in OnMouseUp machen

Delphi-Quellcode:
type TForm4 = Class(TForm)
  private
    IstNochGeklickt: Boolean;
  end;

procedure TForm4.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  IstNochGeklickt := True;
  while IstNochGeklickt do
  begin
    'Tu was
end;
end;

procedure TForm4.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IstNochGeklickt := False;
end;


{***** oder ***************************}

type TForm4 = Class(TForm)
private
IstNochGeklickt: Boolean;
end;

procedure TForm4.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled := True;
end;

procedure TForm4.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled := False;
end;

procedure TForm4.Timer1Timer(Sender: TObject);
begin
'Tu was
end;
[edit] RedBox einfach ma ignoriert ._.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#8

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 16:01
Sag ich doch verständnis Problem.
Ich hatte nun im Kopp das die Variable nur für die Zeit wie der state vorhanden ist auch dessen Wert hat.

Danke für die Hinweise.
Möchte hier noch kurz meinen test Code posten fall jemand ein ähnliches Problem hat.
Wollte möglichst auf Timer verzichten deswegen diese Lösung.

Delphi-Quellcode:
implementation

{$R *.dfm}
var
go : boolean;

procedure TForm4.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  var
  num : Integer;
begin
  num := 1;
  go := true;
  if ssleft in shift then
  begin
    repeat
    Inc(num);
    Edit1.Text := IntToStr(num);
    Application.ProcessMessages;
    until not (go);
  end;
end;

procedure TForm4.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if go then
  begin
    go := false;
  end;
end;
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 16:03
Da du objetorientert programmierst ist es sinnvoller die Variable "go" aus dem globen Bereich in die Klasse zu verschieben (nach private, etc.). Denn sonst bekommst du unter Umständen schöne Effekte wenn du mehrere Instanzen deiner Klasse (TForm4) erzeugst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#10

Re: Maus klick abfragen - verständnis Problem

  Alt 13. Jan 2009, 16:07
Stimmt habs nicht beachtet.
Danke
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07: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