[gelöst] Variable Button-Klick Prozedur

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
martin_frb
Beiträge: 587
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von martin_frb »

Theos Loesung is eigentlich die Fortsetzung von meiner Erklaerung.

D.h ich hab eben nur die Bausteine angefuehrt, Theo hat alles zusammengesetzt.

Theos Loesung ist sehr elegant, und Du solltest wenn du dich etwas mehr mit Pascal auskennst dir dieselbe noch mal ansehen.

Alles was du brauchst: (in class TTaschenRechnerTastatur)

Code: Alles auswählen

 
  Array [0..9] of TButton;
 
TTaschenRechnerTastatur.Create kann dann Kopien dort speichern. Ja das geht, man kann dasselbe Object in 2 oder mehr variablen haben. (Die variable ist nur eine Referenz (bei TObject))

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von Theozh »

Gut, die Lösung mag wohl elegant sein, aber bei mir führt sie zu neuen "Effekten", so z.B. verschwinden bei der Ausführung des Codes vorher exisiterende und von Hand platzierte Controls auf der Form, sobald

Code: Alles auswählen

TTaschenRechnerTastatur.Create
ausgeführt wird.
Warum das so ist, traue ich mich ja nicht mehr zu fragen...
Auch für die anderen beiden Fragen habe ich noch keine Lösung gefunden. Da muss ich mich eben gedulden, bis ich in den FreePascal-, Lazarus Büchern und Delphi-Tutorials auf eine Antwort stoße ;-)
Dank Euch beiden tut's ja... wenn auch noch nicht so elegant wie es laut Euch sein könnte...

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: Variable Button-Klick Prozedur

Beitrag von mse »

Theozh hat geschrieben:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateButton(Form1);  // eine Procedure z.B. aus Unit2 s.u.
  Button1.OnClick:=@Test; // ob hier Test1 oder Test2 ausgeführt wird, will ich auch aus Unit2 definieren
end;
 
procedure TForm1.Test1(Sender: TObject);
begin
  ShowMessage('Test1');
end;   
 
procedure TForm1.Test2(Sender: TObject);
begin
  ShowMessage('Test2');
end;   

Code: Alles auswählen

 
unit Unit2;
...
 
procedure CreateButton(MyForm: TForm);
begin
  NewButton:= TButton.Create(MyForm);
  with NewButton do
  begin
    Name:= 'Knopf1';
    Parent:= MyForm;
    OnClick:= ???  // Wie kann ich hier Test1 oder Test2 definieren?
  end;
end;
Solche Knöpfe definiere ich so, das funktioniert. Jetzt fehlt mir nur, dass ich diesen Knöpfen eine Prozedur bei "OnClick" zuweisen kann.
Und jetzt hoffe ich, dass es "geht nicht" nicht gibt.

Code: Alles auswählen

 
procedure CreateButton(MyForm: TForm1);
begin
  NewButton:= TButton.Create(MyForm);
  with NewButton do
  begin
    Name:= 'Knopf1';
    Parent:= MyForm;
    OnClick:= @MyForm.Test1;  // Wie kann ich hier Test1 oder Test2 definieren?
  end;
end;

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von Theozh »

Hallo mse, das dachte ich auch, aber

Code: Alles auswählen

OnClick:= @MyForm.Test1; 
führt zur Meldung
Error: identifier idents no member "Test1"

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: [gelöst] Variable Button-Klick Prozedur

Beitrag von mse »

Theozh hat geschrieben:Hallo mse, das dachte ich auch, aber

Code: Alles auswählen

OnClick:= @MyForm.Test1; 
führt zur Meldung
Error: identifier idents no member "Test1"
Hast du

Code: Alles auswählen

 
procedure CreateButton(MyForm: TForm1); //Tform1!!!!!!
 
Beachtet?

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von Theozh »

aha, kleines Detail. Ich wollte die Knöpfe aber nicht nur auf TForm1, sondern auf beliebigen TForm.
CreateButton in Unit2 kennt aber TForm1 nicht, und wenn ich uses Unit1 in Unit2 mache, dann bin ich bei einer zirkularen Referenz.

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: [gelöst] Variable Button-Klick Prozedur

Beitrag von mse »

Wenn du Methoden in beliebigen Forms ansprechen willst, geht es so natürlich nicht, da diese im gemeinsamen TForm nicht bekannt sind. Die zirkulare Referenz lässt sich eventuell durch Benützung von uses nach implementation vermeiden.
Vielleicht schreibst du mal, was du schlussendlich erreichen möchtest. ;-)

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von Theozh »

Für verschiedene Anwendungen möchte ich ein Tastaturfeld mit >200 ToggleBoxes automatisch erzeugen. Und somit soll die erzeugende Prozedur nicht Teil einer bestimmten Form sein. Die aktuelle Form soll aber über Parameter definieren können, wie das Tastaturfeld je nach Bedarf genau aussehen soll.
Danke, aber es funktioniert ja nun. Ich kann das Thema abschliessen, solange bis es mir nach der eleganteren Version verlangt...

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: [gelöst] Variable Button-Klick Prozedur

Beitrag von mse »

Soll das Tastaturfeld in das aufrufende Formular eingebetet werden oder ein eingenständiges Formular sein?

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von Theozh »

Ersteres.

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: [gelöst] Variable Button-Klick Prozedur

Beitrag von mse »

Theozh hat geschrieben:Ersteres.
Dann bietet sich ein "submodul" (in Lazarus "TFrame") an. Was soll das Tastenfeld bewirken? Text eingeben, Aktionen auslösen...?

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von Theozh »

Mit den ToggleBoxes werden Positionen markiert, die Dateien bzw. Daten entsprechen. Durch Drücken weiterer Knöpfe werden die Dateien gelesen, Daten extrahiert, berechnet, geplottet, usw...
Ich bin überzeugt, dass es noch weitere elegantere Lösungen gibt, aber dafür fehlt mir jetzt leider die Zeit. Es gibt noch zig andere Baustellen... gerne ein andermal.

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: [gelöst] Variable Button-Klick Prozedur

Beitrag von mse »

Dann lass dir von einem Veteran sagen, so funktioniert programmieren nicht.
Alles was du jetzt durchschlampen lässt wird dich früher oder später einholen. Und dann hast du den mehrfachen Zeitbedarf um das ganze Gebastel auf ein brauchbares Niveau zu heben und es wird dich massig viel Geld kosten. Es besteht sogar die Gefahr, dass das Projekt niemals befriedigend laufen wird. Es wäre ganz sicher nicht das erste Softwareprojekt das auf dem Müll landet und von vorne begonnen werden muss. ;-)

Martin

Theozh
Beiträge: 99
Registriert: So 1. Jul 2012, 10:56

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von Theozh »

Martin, ja, das lasse ich mir gerne von Dir sagen und ich bin mir der Gefahren auch bewusst.
Ich bin kein hauptamtlicher Programmierer und das Ganze ist kein Riesenprojekt, das endlos weiteroptimiert werden müsste und es ist für Eigenbedarf.
Ich habe die Wahl: mich erst wochen/monatelang intensivst im stillen Kämmerlein damit zu beschäftigen, um ein perfektes Programm zu schreiben (sicherlich wäre das erstrebenswert, aber die Zeit habe ich nicht und viele Fragen kann man nicht einfach durch Bücher, Tutorials oder Forenlesen beantworten) oder sporadisch bei akuten Problemen im Forum nachzufragen (was vereinzelt andere zu nerven scheint) oder das Ganze in professionelle Hände zu geben und bei jedem kleinen Änderungswunsch wieder antanzen zu müssen (dazu habe ich das Geld nicht).

Benutzeravatar
theo
Beiträge: 10900
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] Variable Button-Klick Prozedur

Beitrag von theo »

Bin absolut Martins Meinung, und hatte das hier ja auch so ähnlich gesagt.
So mag man dir auch nicht helfen, genau so wie man niemandem helfen mag ein Haus zu bauen, indem man Ziegelsteine mit Klebeband aufeinanderpappt, weil er keine Zeit hat das Maurerhandwerk zu erlernen. :wink:

Antworten