Autor Beitrag
Pyrrhon
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 11.12.07 07:53 
Sicherlich eine Anfängerfrage, die Euch zum Lachen bringt. Aber vielleicht hilft mir trotzdem jemand.

Ich etwas wie:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type  
       TProblem = class
         procedure solve_problem;
       end;

       TForm1 = class(TForm)
         procedure write_in_log(zeile:string);
         Problem:TProblem;
       end;


Wie kann ich in der Prozedur solve_problem die Funktion write_in_log aufrufen?

Pyrrhon

Moderiert von user profile iconjasocul: Code- durch Delphi-Tags ersetzt
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 11.12.07 07:57 
Nur über eine Instanz von TForm1

_________________
Markus Kinzler.
Pyrrhon Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 11.12.07 08:55 
Okay, ich habe irgendwas wie

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type    
       TProblem = class  
         procedure solve_problem;  
       end;  

 
       TForm1 = class(TForm)  
         procedure write_in_log(zeile:string);  
         Problem:TProblem;  
       end; 

var Form1:TForm1;

begin
 Form1 := TForm1.Create;
 Form1.Problem := TProblem.Create;
 Form1.Problem.solve_problem;
 Form1.Problem.Free;
 Form1.Free;
end.


Und nun?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 11.12.07 09:20 
Wenn TProblem sich um die Behandlung von Problemen incl einer Protokollierung kümmert, würde ich die Prozedur write_in_log in die Klasse TProblem aufnehmen und nicht in TForm1.

Beim Erzeugen einer Instanz von TProblem kannst Du ja den Dateinamen im Create übergeben, falls das Dein Problem sein sollte. Darüberhinaus kann der Dateiname auch eine Property sein, die dann zur Laufzeit geändert werden könnte. Natürlich sind dann Nebenbedingungen zu beachten, wenn zum Beispiel die Datei gerade geöffnet ist.
Pyrrhon Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 11.12.07 09:35 
write_in_log soll nichts in eine Datei schreiben, dann könnte die Prozedur natürlich in TProblem verschoben werden. write_in_log soll etwas in einen Memo-Bereich schreiben, der zu TForm gehört.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 11.12.07 09:42 
Dann übergib der Methode eine Referenz des Memos.

_________________
Markus Kinzler.
Pyrrhon Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 11.12.07 10:33 
Ich glaube ich verstehe den Tip nicht.

Pyrrhon
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 11.12.07 10:47 
Pyrrhon, kann es sein, daß du dir ein Problem machst wo kein Problem da ist? Vielleicht ist auch nur das Beispiel zu konstruiert, so daß ich mir dein Problem nicht vorstellen kann, vielleicht ist das nur eine Prinzipfrage, aber ich programmiere schon so lange und hatte noch nie so ein Problem. Vielleicht hatte ich noch nie so ein Problem, weil ich anders denke beim Programmieren und mich nicht frage wie mein Magen, der innen ist, von außen mir das Bäuchlein massieren kann. Die Frag ist also, muß write_in_log eine Prozedur von Form1 sein? Kann es nicht einfach eine normale Prozedur sein. Falls du in der Prozedur auf viele Komponenten auf Form1 zugreifst, kann man das auch so lösen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedurer irgendwas(Form: TForm; abc: String);
begin
  with Form do
  begin


  end;
end;


Die zweite Frage ist, wieso beide Klassen nicht eine eigene Prozedur haben.

Die dritte Frage ist, wieso hat nicht TProblem die Prozedur und du greifst von TForm1 bei Bedarf auf sie?

_________________
Popov
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 11.12.07 10:52 
user profile iconPyrrhon hat folgendes geschrieben:
Ich glaube ich verstehe den Tip nicht.

Pyrrhon

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
type    
       TProblem = class  
         procedure solve_problem;  
         procedure write_in_log(zeile:string; Memo: TMemo);  
       end;  

       TForm1 = class(TForm)  
         Problem:TProblem;  
       end; 

var Form1:TForm1;

begin
 Form1 := TForm1.Create( Nil);
 Form1.Problem := TProblem.Create;
 Form1.Problem.solve_problem;
 Form1.Problem.Free;
 Form1.Free;
end.

_________________
Markus Kinzler.
Pyrrhon Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 11.12.07 15:07 
Mag sein, dass ich zu kompliziert gedacht habe. Aber Dank Eurer Hilfe funktioniert es nun bestens. Danke.

Pyrrhon