Button mehrfach anders benutzen

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Antworten
martin1996
Beiträge: 2
Registriert: Sa 24. Sep 2011, 19:02

Button mehrfach anders benutzen

Beitrag von martin1996 »

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

jwdietrich
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

Beitrag von jwdietrich »

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

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.
Dateianhänge
Bild 1.png
Nach dem ersten Klick
Nach dem ersten Klick
Bild 2.png (12.12 KiB) 1874 mal betrachtet
Nach dem zweiten (und jede weiteren) Klick
Nach dem zweiten (und jede weiteren) Klick
Bild 3.png (11.68 KiB) 1874 mal betrachtet

martin1996
Beiträge: 2
Registriert: Sa 24. Sep 2011, 19:02

Re: Button mehrfach anders benutzen

Beitrag von martin1996 »

danke

u-boot
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

Beitrag von u-boot »

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)

MAC
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

Beitrag von MAC »

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)

Code: Alles auswählen

Signatur := nil;

Maik81ftl
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

Beitrag von Maik81ftl »

Würde hier sogar noch eine Ecke anders rangehen. Wenn du die Reihenfolge einmal fest definieren willst:

  • 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

Antworten