AGB  ·  Datenschutz  ·  Impressum  







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

OnClick-Ereignis Wiederholen

Ein Thema von Freddy7 · begonnen am 5. Mai 2006 · letzter Beitrag vom 9. Mai 2006
Antwort Antwort
Freddy7

Registriert seit: 6. Feb 2006
Ort: Jena
5 Beiträge
 
#1

OnClick-Ereignis Wiederholen

  Alt 5. Mai 2006, 17:02
Moin, moin,

ich möchte gerne folgendes realisieren (vermutlich sehr simple):
Wenn ich auf einen Button drücke wird meine OnClick-Routine ausgeführt. Dies aber leider nur einmal. Wenn ich die Routine ein zweites mal starten möchte, muss ich noch einmal auf den Button klicken.
Daher meine Frage: Wie stelle ich es an, dass die Routine immer wieder aufgerufen wird, solange ich den Button gedrückt halte?

Gruss,
Freddy
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: OnClick-Ereignis Wiederholen

  Alt 5. Mai 2006, 17:16
Herzlich willkommen in der Delphi-PRAXiS, Freddy.

Hier ein Muster ohne Wert:

Delphi-Quellcode:
procedure TDemoForm.DemoButtonMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: Integer;
begin
  // DemoButtonDown bitte als private variable von Form deklarieren
  DemoButtonDown := true;
  i := 0;
  while DemoButtonDown do
  begin
    Inc(i);
    StatusBar.SimpleText := IntToStr(i);
    Application.ProcessMessages;
  end;
end;

procedure TDemoForm.DemoButtonMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DemoButtonDown := false;
end;
Falls du die Maus nicht festhalten willst, dann nimmst du einen Button mit der Eigenschaft Down.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#3

Re: OnClick-Ereignis Wiederholen

  Alt 5. Mai 2006, 17:20
Delphi-Quellcode:
...
  while DemoButtonDown do
  begin
    demobutton.Click;
  end;
würde ich sagen... ^^
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: OnClick-Ereignis Wiederholen

  Alt 5. Mai 2006, 17:23


Du könntest auch eine Funktion am Ende der Prozedur aufrufen, die im Grunde den selben Code wie die Prozedur enthält (bis auf den function-Aufruf). Nicht schön, aber sollte funktionieren und ist einfach (Ich sage nicht, dass die Anderen Möglichkeiten nicht einfach sind ).
mfg zecke
  Mit Zitat antworten Zitat
Freddy7

Registriert seit: 6. Feb 2006
Ort: Jena
5 Beiträge
 
#5

Re: OnClick-Ereignis Wiederholen

  Alt 8. Mai 2006, 11:11
Hallo zusammen,

vielen Dank für die Hinweise. Ich habe daraus folgende Lösung gebastelt, die genau das tut, was ich wollte (vielleicht geht's ja noch einfacher?): (Änderung: Ich verwende die MouseDown-Routine, da die Click-Routine erst ausgeführt wird, wenn der Knopf losgelassen wird!)

Delphi-Quellcode:
procedure Tfrm_ProMonZ.DemoButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ButtonDown := true;
  while ButtonDown do
  begin
    //Anweisungen
    Application.ProcessMessages;
  end;
end;

procedure Tfrm_ProMonZ.DemoButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    ButtonDown:=false;
end;
Gruss,
Freddy

[edit=sakura] [delphi]Tags Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: OnClick-Ereignis Wiederholen

  Alt 8. Mai 2006, 11:52
Ich würde es mal so probieren:

Delphi-Quellcode:
procedure Tfrm_ProMonZ.DemoButtonClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  while GetKeyState(VK_LBUTTON)<0 do
  begin
    //Anweisungen
    Application.ProcessMessages;
  end;
end;
Das GetKeyState bewirkt, dass die Schleife solange läuft, bis die Maustaste losgelassen wird. Vorteil ist allerdings, dass du nicht auf das Event MouseUp des Buttons angewiesen bist. Denn es gibt garantiert möglichkeiten, wie man das Event umgehen kann und dann hängst in einer ollen Schleife fest. So kann es nicht passieren, da die Maustaste bei jedem Durchlauf abgefragt wird.

Allerdings nur ein Versuch und noch nicht getestet.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Freddy7

Registriert seit: 6. Feb 2006
Ort: Jena
5 Beiträge
 
#7

Re: OnClick-Ereignis Wiederholen

  Alt 9. Mai 2006, 14:57
Yo, auch ne gute Idee. Hab Deine Lösung implementiert, da sie ja noch deutlich einfacher ist (nur eine Ereignisroutine statt zwei. Zudem brauche ich keine globale Variable).

Du meinstest natürlich die MouseDown-Routine und nicht die Click-Routine. Ich hab das entsprechend geändert.

Delphi-Quellcode:
procedure Tfrm_ProMonZ.DemoButton[b]MouseDown[/b](Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  while GetKeyState(VK_LBUTTON)<0 do
  begin
    //Anweisungen
    Application.ProcessMessages;
  end;
end;
Gruss,
Heiko

[edit=Luckie]Delphi-Tags gesetzt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]
  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 14:59 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