Hallo zusammen
ich bin ziemlich neu hier und habe auch direkt ein Problem. Ich nutze Lazarus erst seit kurzer Zeit und habe auch nur ein wenig Erfahrung mit Visual Basic also bin ich noch Anfänger. Ich würde gerne wissen wie ich einen Button zweimal benutzen kann er aber beim zweiten Klicken eine andere Funktion ausführt.
Vielen Dank im Voraus
Martin
Button mehrfach anders benutzen
-
- Beiträge: 2
- Registriert: Sa 24. Sep 2011, 19:02
-
- Beiträge: 167
- Registriert: Mo 20. Okt 2008, 20:50
- OS, Lazarus, FPC: macOS 10.4-13.4, Windows 2000-11, Raspbian (L 2.2.6, FPC 3.2.2)
- CPU-Target: PowerPC, Intel, ARM
- Wohnort: Hattingen, NRW
- Kontaktdaten:
Re: Button mehrfach anders benutzen
Das geht relativ einfach.
Man kann das z. B., indem man eine globale boolesche Variable definiert, die festhält, ob der Button schon mal geklickt wurde, und je nachdem, ob diese Variable true oder false ist, führt man eine von zwei Funktionen aus.
Im nachfolgenden Beispiel hat das Formular einen Button und ein Edit-Feld. Darüber hinaus ist die globale Variable "ButtonClicked" deklariert, die die o. g. Funktion innehat. Die Entscheidung über die auszuführende Aktion triff dann der OnClick-Handler des Buttons "TForm1.Button1Click":
Man kann das z. B., indem man eine globale boolesche Variable definiert, die festhält, ob der Button schon mal geklickt wurde, und je nachdem, ob diese Variable true oder false ist, führt man eine von zwei Funktionen aus.
Im nachfolgenden Beispiel hat das Formular einen Button und ein Edit-Feld. Darüber hinaus ist die globale Variable "ButtonClicked" deklariert, die die o. g. Funktion innehat. Die Entscheidung über die auszuführende Aktion triff dann der OnClick-Handler des Buttons "TForm1.Button1Click":
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
ButtonClicked: boolean = false;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
if ButtonClicked then
Edit1.Text := 'Funktion 2'
else
Edit1.Text := 'Funktion 1';
ButtonClicked := true;
end;
end.
-
- Beiträge: 2
- Registriert: Sa 24. Sep 2011, 19:02
-
- Beiträge: 306
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Button mehrfach anders benutzen
Abgesehen von Funktion vs. Prozedur hätte ich bei dieser Frage eher sowas vorgeschlagen:
Code: Alles auswählen
procedure TForm1.ButtonClick1(Sender: TObject);
begin
Edit1.Text:='prozedur 1';
Randomize;
Button1.OnClick:=@ButtonClick2;
end;
procedure TForm1.ButtonClick2(Sender: TObject);
begin
Edit1.Text:='prozedur 2';
Button1.OnClick:=@ButtonClick4;
end;
procedure TForm1.ButtonClick3(Sender: TObject);
begin
Edit1.Text:='prozedur 3';
Button1.OnClick:=@ButtonClick2;
end;
procedure TForm1.ButtonClick4(Sender: TObject);
begin
Edit1.Text:='prozedur 4';
if random>0.6
then Button1.OnClick:=@ButtonClick3
else Button1.OnClick:=@ButtonClick2
;
end;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Button mehrfach anders benutzen
Beides ist richtig.
Letzteres ist dabei vielleicht etwas komplizierter zu verstehen:
im Objectinspektor hast du deinem Button1 die Procedure Button1Click zugeordnet...
Also wird beim Klick auf Button1 diese ausgeführt.
Diese Zuordnung kannst du auch im Nachhinein ändern, genau das hat u.boot gemacht. In diesem fall sogar mit 4 Funktionen...
Letzteres würde ich eher empfehlen wenn die Funktionen recht weit auseinanderliegen und das erste wenn sie sehr ähnlich sind. (einfach nur um den Code ordentlich zu halten)
Letzteres ist dabei vielleicht etwas komplizierter zu verstehen:
im Objectinspektor hast du deinem Button1 die Procedure Button1Click zugeordnet...
Also wird beim Klick auf Button1 diese ausgeführt.
Diese Zuordnung kannst du auch im Nachhinein ändern, genau das hat u.boot gemacht. In diesem fall sogar mit 4 Funktionen...
Letzteres würde ich eher empfehlen wenn die Funktionen recht weit auseinanderliegen und das erste wenn sie sehr ähnlich sind. (einfach nur um den Code ordentlich zu halten)
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Button mehrfach anders benutzen
Würde hier sogar noch eine Ecke anders rangehen. Wenn du die Reihenfolge einmal fest definieren willst:
empfehle ich dies. Must du nur an der entstrechenden Stelle einen fkt_count hochzählen.
- Funktion 1
- Funktion 2
- Funktion 3
- Funktion 4
- Funktion 5
- Funktion 6
- Funktion 7
- Funktion 8
empfehle ich dies. Must du nur an der entstrechenden Stelle einen fkt_count hochzählen.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D