Button in einem anderen UP abfragen
Button in einem anderen UP abfragen
Hallo,
ich habe mein Formular mit vielen (26, alle Buchstaben des Alphabets) Buttons bestückt.
Nun möcht ich nicht 26 UP's schreiben sondern in einem einzigen UP alle Buttons abfragen. Also etwa " if Button1.checked then Buchstabe :='A' ... Aber dies geht so nichtel. Wer kann mir helfen ????
Dankea
ich habe mein Formular mit vielen (26, alle Buchstaben des Alphabets) Buttons bestückt.
Nun möcht ich nicht 26 UP's schreiben sondern in einem einzigen UP alle Buttons abfragen. Also etwa " if Button1.checked then Buchstabe :='A' ... Aber dies geht so nichtel. Wer kann mir helfen ????
Dankea
-
- Beiträge: 323
- Registriert: Di 12. Apr 2011, 13:21
- OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
- CPU-Target: 1core 1,8GHz 32Bit
- Wohnort: Fürth
- Kontaktdaten:
Re: Button in einem anderen UP abfragen
Natürlich geht das! Erstelle bei einem Button die Funktion. Ich hoffe, Button1.checked tut das was Du Dir vorstellt. Einfach mal mit Buttons vertraut machen. Dann im Objektinspektor unter Komponenten die anderen Buttons aufrufen und den Namen des Ereignisses dort hinein duplizieren.Olaf_78 hat geschrieben:Nun möcht ich nicht 26 UP's schreiben sondern in einem einzigen UP alle Buttons abfragen. Also etwa " if Button1.checked then Buchstabe :='A' ... Aber dies geht so nichtel.
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Button in einem anderen UP abfragen
So geht's:
Für TButton kommt der Typ deines Buttons.
Code: Alles auswählen
var i: integer;
begin
for i:=0 ControlCount-1 do
if Controls[i] is TButton then
if TButton(Controls[i]).Checked then begin
//tue etwas
end;
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Button in einem anderen UP abfragen
Falls der Zweck die Zeicheneingabe mittels Maus ist, kann man die numerische Entsprechung der Zeichen in die "TButton.Tag" properties eintragen. Dann in alle OnClick Ereignisse eine gemeinsame Ereignisbehandlungsroutine einhängen:
Oder in einem UnicodeString System:
Die numerischen Werte sind hier:
http://www.unicode.org/charts/
z.B. mitteleuropäische Zeichen:
http://www.unicode.org/charts/PDF/U0000.pdf
http://www.unicode.org/charts/PDF/U0080.pdf
Code: Alles auswählen
procedure TForm1.clickexe(Sender: TObject);
var
pressedchar: string;
begin
pressedchar:= utf8encode(unicodechar(tbutton(sender).tag));
end;
Code: Alles auswählen
procedure TForm1.clickexe(Sender: TObject);
var
pressedchar: unicodechar;
begin
pressedchar:= unicodechar(tbutton(sender).tag);
end;
http://www.unicode.org/charts/
z.B. mitteleuropäische Zeichen:
http://www.unicode.org/charts/PDF/U0000.pdf
http://www.unicode.org/charts/PDF/U0080.pdf
Re: Button in einem anderen UP abfragen
Hallo, danke für die vielen Tipps. Werde jetzt alles mal ausprobieren.
Olaf
Olaf
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: Button in einem anderen UP abfragen
Für TButtons gibt des den EventHandler OnClick. Die Lazarus IDE erzeugt bei Doppelclick auf einen Button automatisch einen Eventhandler im Form, der mit dem Button verknüpft ist. Diese Methode heitß etwa . Der Code, den du dabei nicht siehst, sieht wie folgt aus:
Bei 26 Buttons (du hast die Umlaute und die Ligatur ß vergessen), fügst du also für jeden Button die Zeile
ein. Dann wird - egal, welchen Button du clickst - der EventHandler des Forms ausgeführt. Dort musst du nur noch feststellen, welcher Button den Handler aufgerufen hat. Dazu castest du das Object Sender zu einem TButton und prüfst z.B. den Namen des Buttons:
Code: Alles auswählen
Form1Button1Click(Sender: TObject);
Code: Alles auswählen
Button1.OnClick := @Form1Button1Click;
Code: Alles auswählen
ButtonXY.OnClick := @Form1Button1Click;
Code: Alles auswählen
if (TButton(Sender).Name = "ButtonX") then ...
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Button in einem anderen UP abfragen
Die Button-Erzeugung kannst du auch automatisieren, der kleine Programm-Auschnitt erzeugt alle Zeichen von 32-128.
Für Umlaute können gut noch manuelle Anpassungen gemacht werden.
Für Umlaute können gut noch manuelle Anpassungen gemacht werden.
Code: Alles auswählen
TForm1 = class(TForm)
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
Button: array of TButton;
const
anzButton = 128 - 32;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
const
w = 32;
h = 32;
begin
SetLength(Button, anzButton);
for i := 0 to anzButton - 1 do begin
Button[i] := TButton.Create(Self);
Button[i].Parent := Self;
Button[i].Width := w;
Button[i].Height := h;
Button[i].Left := (i mod 16) * (w + 2);
Button[i].Top := (i div 16) * (h + 2);
Button[i].Caption := char(i + 32);
Button[i].OnClick := @Button1Click;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := TButton(Sender).Caption;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i: integer;
begin
for i := 0 to anzButton - 1 do begin
Button[i].Free;
end;
end;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Button in einem anderen UP abfragen
Vielen Dank für eure vielen Hinweise. Schönen Sonntagabend! 
