Nach OpenDialog einen ButtonClick automatisch ausführen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
McReier
Beiträge: 48
Registriert: Sa 17. Aug 2013, 11:35

Nach OpenDialog einen ButtonClick automatisch ausführen

Beitrag von McReier »

Hallo,
habe einen OpenDialog in meiner Anwendung und würde gerne nach dem "einladen" die Daten verarbeiten (berechnen lassen).
Die Verarbeitung passiert in der Anwendung eigentlich mit einen ButtonClick auf "Berechnen".

Ich habe schon im Objektinspektor nach einen geeigneten Ereignis gesucht aber nix passendes gefunden. Hab ich da was übersehen oder gibts da wirklich nix?
Muss ich evtl. mit einen goto arbeiten? Kann man da direkt in eine bestimmte Zeile springen?

Ein Teil meines Quelltextes:

Code: Alles auswählen

procedure TForm1.Image28Click(Sender: TObject);
 var
  ini: TCustomIniFile;
 begin
   if OpenDialog1.Execute then begin
   ini := TIniFile.Create(OpenDialog1.FileName);
   try
     Edit1.Text := ini.ReadString('Datum','Datum','');
     MaskEdit1.Text := ini.ReadString('X_14','AX4','');
     MaskEdit2.Text := ini.ReadString('X_15','AX5','');
     MaskEdit3.Text := ini.ReadString('X_16','AX6','');
   finally
     ini.Free;
   end;
   end; 
Was schlägt Ihr mir vor?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Nach OpenDialog einen ButtonClick automatisch ausführen

Beitrag von Michl »

Du könntes einfach die Procedure, die dem Buttonklick zugewiesen ist, aufrufen mit z.B.:

Code: Alles auswählen

procedure TForm1.Image28Click(Sender: TObject);
var
  ini: TCustomIniFile;
begin
  if OpenDialog1.Execute then begin
  ini := TIniFile.Create(OpenDialog1.FileName);
  try
    Edit1.Text := ini.ReadString('Datum','Datum','');
    MaskEdit1.Text := ini.ReadString('X_14','AX4','');
    MaskEdit2.Text := ini.ReadString('X_15','AX5','');
    MaskEdit3.Text := ini.ReadString('X_16','AX6','');
  finally
    ini.Free;
  end;
 
  Button1Click(Nil);
//oder  Button1Click(Sender);
 
end; 
Sauberer und später einmal verständlicher zu lesen wäre es, eine eigene Berechnungsprocedure zu erstellen, die dann von dem Button1Click und dem Image28Click -> Opendialog genutzt wird:

Code: Alles auswählen

procedure BerechneDaten;           //evtl. als Methode der Klasse TForm1
begin
  ...                              //mach was mit Daten
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  BerechneDaten;
end;
 
procedure TForm1.Image28Click(Sender: TObject);
...
  BerechneDaten;
...
end;
Zuletzt geändert von Michl am So 20. Okt 2013, 21:34, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

McReier
Beiträge: 48
Registriert: Sa 17. Aug 2013, 11:35

Re: Nach OpenDialog einen ButtonClick automatisch ausführen

Beitrag von McReier »

Hallo Michl,
die 1. Version verwende ich bis dato. Gefällt mir aber nicht, da ich bei Änderung immer daran denken muss, die Formel 2x zu ändern.

Sauberer und später einmal verständlicher zu lesen wäre es, eine eigene Berechnungsprocedure zu erstellen, die dann von dem Button1Click und dem Image28Click -> Opendialog genutzt wird:

Code: Alles auswählen

procedure BerechneDaten;           //evtl. als Klasse von TForm1
begin
  ...                              //mach was mit Daten
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  BerechneDaten;
end;
 
procedure TForm1.Image28Click(Sender: TObject);
...
  BerechneDaten;
...
end;
[/quote]

Den Vorschlag find ich super, allerdings klappt das mit dem Button1Click nicht. Da kommt folgende Fehlermeldung:

Code: Alles auswählen

unit1.pas(1219,16) Error: Wrong number of parameters specified for call to "BerechneDaten"
bei folgenden Quelltext:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  BerechneDaten;
end; 
Was mach ich da falsch?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Nach OpenDialog einen ButtonClick automatisch ausführen

Beitrag von Michl »

Dann zeig bitte mal deinen Quelltext, so kann man dir nicht helfen. Irgendwie hast du vergessen Parameter von der Procedure mit anzugeben oder zu viele (evtl, vergessenes Semikolon etc.), wo, ist so nicht ersichtlich.

Hatte oben einen Schreibfehler die Procedure ist natürlich keine Klasse -> sollte heissen: "//evtl. als Methode der Klasse TForm1"

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

McReier
Beiträge: 48
Registriert: Sa 17. Aug 2013, 11:35

Re: Nach OpenDialog einen ButtonClick automatisch ausführen

Beitrag von McReier »

Michl hat geschrieben:Dann zeig bitte mal deinen Quelltext, so kann man dir nicht helfen. Irgendwie hast du vergessen Parameter von der Procedure mit anzugeben oder zu viele (evtl, vergessenes Semikolon etc.), wo, ist so nicht ersichtlich.

Hatte oben einen Schreibfehler die Procedure ist natürlich keine Klasse -> sollte heissen: "//evtl. als Methode der Klasse TForm1"
Nun klappt's! Habe die procedure BerechneDaten einfach im Objektinspektor unter OnClick angewählt :)
Danke!! :D

Antworten