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
- 
				Heinrich Wolf
 - 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.
- 
				Soner
 - Beiträge: 764
 - 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;         
 - 
				mse
 - 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
- 
				Antrepolit
 - 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
- 
				Mathias
 - Beiträge: 7088
 - 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!  