Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Prozedurale programmierung Prozeduraufruf einerClickprozedur


Vamos - Mi 28.10.09 17:36
Titel: Prozedurale programmierung Prozeduraufruf einerClickprozedur
Hallo Ihr lieben,

ich stehe vor folgendem Problem:

ich habe bereits eine sehr lange Prozedur per onClick Ereignis im OI erstellt. Diese Prozedur brauche ich nun nochmal so in etwa:


Delphi-Quelltext
1:
2:
3:
4:
5:
if 12 then// :-P
begin
   procedure TForm1.BProzedur1Click(Sender: TObject);
   procedure TForm1.BProzedur2Click(Sender: TObject);
end;


Ich weiss, dass ich das ganze als Funktion deklarieren könnte, nur muss ich dann nicht trotzdem meinen Quelltext noch einmal kopieren?

Die Prozeduren sollen manuell (Per ButtonClick) und bei Bedarf (bestimmter merker in der Log, die beim Starten auf der Form geladen wird = 1) ausgeführt werden.

Per Button kein Problem, automatisch ohne den SC zu kopieren, k.a.

Vielen Dank

PS: Ist schwierig da was zu finden, habe nach Prozeduraufruf + Click und abgewandelt gesucht.. : (


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Mi 28.10.2009 um 16:40


Gausi - Mi 28.10.09 17:45

Meinst du sowas?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Lang;
begin
  // 100 Zeilen Code
end;

procedurr TForm2.NochMehr;
begin
  // 200 Zeilen Code
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if 42 = 43 then
      Lang
   else
      NochMehr;
end;


thepaine91 - Mi 28.10.09 17:46

Also ich kapier die Frage leider nicht. :nixweiss:
Sonst würde ich dir gerne Helfen.


Vamos - Mi 28.10.09 17:51

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Meinst du sowas?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Lang;
begin
  // 100 Zeilen Code
end;

procedurr TForm2.NochMehr;
begin
  // 200 Zeilen Code
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if 42 = 43 then
      Lang
   else
      NochMehr;
end;


Erstmal danke für die schnelle Antwort!

Ich meine es genau andersrum.

ich habe 18x Clickprozeduren, also prozeduren, die ich hinter den Button des OI gelegt habe.

2 Davon sind ralativ lang und ich benötige Sie noch einmal.

Das Programm soll Dateien löschen. Es gibt im programm 2 Buttons: Daten Sammeln, Daten löschen. Später habe ich mir überlegt, dass das Programm sich merken könnte welche Dateien immer gelöscht werden sollen und deshalb hab ich auf die Form selbst Quelltext gelegt, der nach dem Starten direkt Sammeln und Löschen soll.

Also meine prozeduren:


Delphi-Quelltext
1:
2:
   procedure TForm1.BSammelnClick(Sender: TObject);
   procedure TForm1.BLoeschenClick(Sender: TObject);


Und die sollen direkt aufgerufen werden. Das klappt ja leider nicht:


Delphi-Quelltext
1:
2:
3:
4:
5:
if...then
begin
Sammeln;
Loeschen;
end;


Ich hoffe ihr versteht, was ich meine... Thx nochmal

Moderiert von user profile iconKlabautermann: Delphi-Tags eingefügt.


thepaine91 - Mi 28.10.09 17:54


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure ?;
begin
  Button1.click;
  Button2.click;
// oder
  Button1click({Tobject});
  Button2click({Tobject});
end;

so?


Gausi - Mi 28.10.09 17:54

Naja, du musst die Proezduren schon so aufrufen, wie sie heißen, und mit den richtigen Parametern. Also dann wohl so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.BSammelnClick(Sender: TObject); 
procedure TForm1.BLoeschenClick(Sender: TObject); 

// Und die sollen direkt aufgerufen werden. Das klappt ja leider nicht: 

if...then 
begin 
BSammelnClick(Sender);   // wenn Sender hier bekannt ist, d.h. das in einer andern OnClick-Methode steht.  
BLoeschenClick(Sender);  // Sonst halt die Bezeichnunug eines passenden Buttons eintragen, z.B. BLoeschen, oder auch
                         // Wenn der Sender gar nicht gebracuht wird, nur NIL
end;


Vamos - Mi 28.10.09 17:59

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Das wars!! Danke vielmals!

1. Hatte ich Form1.BSammelnClick(Sender); stehen,
2. Das mit dem Sender hatte ich mit (self) versucht...

Jetzt habe ich dank dir bestimmt 100 Zeilen Code gespart! :flehan: :-)


thepaine91 - Mi 28.10.09 18:03

Am self sollte es nicht gelegen haben das funktioniert auch.


Klabautermann - Mi 28.10.09 18:25

user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Am self sollte es nicht gelegen haben das funktioniert auch.

Das kommt darauf an, was in den aufgerufenen Methoden mit dem Sender angestellt wird (bzw. ob sie vielleicht nur laufen, wenn Sender ein tButton ist oder ähnliches).

Gruß
Klabautermann


thepaine91 - Mi 28.10.09 18:29

Stimmt in dem Fall funktioniert es nicht mehr das ist richtig.

Verbesserung: Im normalfall funktioniert es mit Self als Sender. ;)

Aber ich ging jetzt davon aus das er dann gesagt hätte es bricht an der und der stelle ab oder es kam der und der Fehler. :nixweiss:

Naja ist ja auch egal frage wurde ja beantworter. :-)


Klabautermann - Mi 28.10.09 18:36

Hi,
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Aber ich ging jetzt davon aus das er dann gesagt hätte es bricht an der und der stelle ab oder es kam der und der Fehler. :nixweiss:

naja, da die Frage darauf hindeutet, dass user profile iconVamos noch nicht sooo viel Erfahrung mit der Programmierung in Delphi hat, halte ich es für möglich, dass er 1. mit dem Debugger noch nicht vertraut genug ist, um in Proceduren hinein zu steppen und 2. eventuell auch die Bedeutung von Konstrukten wie if sender is tButton then nicht auf Anhieb erkennt.

Daher halte ich Aussagen, die so Pauschal formuliert sind wie deine Ursprüngliche für "gewagt" ;).

Gruß
Klabautermann


thepaine91 - Mi 28.10.09 19:00

*Zustimm*
Aber: :rofl: Wer nicht wagt der nicht gewinnt. :D
Ne mal im ernst ^^ ist schon richtig so ne Aussage sollte man eigentlich ohne zu wissen was überhaupt in der z.B. procedure passiert nicht tätigen.

Du verstehst meinen Gedankengang z.B. sehr gut. :P