Autor Beitrag
Roboman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 115

WinXP
Delphi 2005 Prof.; Delphi 6 Prof.; C++; C; Basic
BeitragVerfasst: Mi 24.05.06 23:52 
Hallo Leute
erst mal super Sache hier mit euch. Hab mir schon viele Anregungen hier geholt, ihr seit einfach spitze. Ich bin leider Anfänger in Delphi, bin E-Techniker und komme halt auch nicht um die Softwareentwicklung drum herum. Ich habe jetzt ein kleines Programm geschrieben, welches leider viele Buttons, 3 Editfelder und zwei Dateien erzeugt. Jetzt ist mein Problem, ich möchte gerne soweit wie es geht Code auslagern in separate Units. z. B. die procedure TForm1.Start_ButtonClick(Sender: TObject); in die Unit StartButton. usw. halt. ich hab schon die entsprechenden Units angelegt und Code ausgelagert. Aber wie binde ich die jetzt in der Main-Unit ein und was muss ich in den einzelnen Units noch so beachten?

Ich hoffe ihr könnt mir weiter helfen. Ich danke euch.
Arno Nym
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Do 25.05.06 01:44 
Hi,
also wenn du eine extra Klasse StartButton erzeugt hast in dem die Funktion
Start_Buttonklick gestartet werden soll geht es leider nur etwas umständlich,
der Code sieht wie folgt aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
unit StartButton;

interface

uses classes;

type
 TButtonEvents = class
 public
  procedure Start_Buttonklick(Sender:TObject);
end;

implementation

procedure TButtonevents.Start_Buttonklick(Sender:TObject);
begin;
//anweisungen
end;

end.


Dann musst du diese Methode noch im Hauptformular dem Button zuweisen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
.
.
.
uses ... StartButton....
.
.
.
var ButtonEvents: TButtonevents;
.
Implementation
.
.
procedure TForm1.FormCreate(Sender: TObject);
begin
 Button1.OnClick := ButtonEvents.btclick;
end;
.
.


Leider ist die Weitergabe von Parametern sehr eingeschränkt, und man muss diesen Umweg über Klassenmethoden machen, aber es funktioniert wenigstens :)

MFG, Arno Nym

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt
Roboman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 115

WinXP
Delphi 2005 Prof.; Delphi 6 Prof.; C++; C; Basic
BeitragVerfasst: Do 25.05.06 18:00 
Servus,
danke für die Antwort, jetzt steh ich noch mehr auf dem Schlauch. Also, vielleicht hab ich es ja falsch formuliert. Also, wenn ich ein neues Projekt erstelle, und einen Button auf nem Formular setzte und einen Doppelklick darauf mache, so bekomme ich ja das OnKlick-Event. So diese wird ja dann auch in der Main-Unit ja abgelegt. Jetzt möchte ich diese Sache:

procedure TForm1.Start_ButtonClick(Sender: TObject);

von der Main-Unit in die ButtonStart-Unit auslagern. Ich hoffe ich hab es jetzt verständlicher ausgedrückt, sorry bin Neuling im Bereich Programmieren.

Trotzdem danke für die Anwort.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 25.05.06 18:31 
Ich glaube, das ist nicht so ohne weiteres möglich, wenn man mal von der Lösung von Arno Nym absieht. Was aber noch geht ist sowas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MeineProzedurInUnit2;
end;

Wobei MeinProzedurInUnit2 dann irgendeine (lange) Prozedur in Unit2 ist.

_________________
We are, we were and will not be.
Roboman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 115

WinXP
Delphi 2005 Prof.; Delphi 6 Prof.; C++; C; Basic
BeitragVerfasst: Do 25.05.06 18:43 
Danke für die Antwort, funzt irgendwie nicht bei mir. Es muss doch irgendwie möglich sein,seinen Sourcecode so zu verändern, das ich

procedure TForm1.Start_ButtonClick(Sender: TObject);

in irgendeine beliebige neu dem Projekt hinzugefügte Unit reinstecken kann. Ich habe unter etlichen Buttons Ereignisse die dann geschehen und die möchte ich jeweils der Übersicht halber in eigene Units stecken.
Danke für die Antwort. Wie gesagt ich bin Neuling.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 25.05.06 21:44 
Hallo!

user profile iconRoboman hat folgendes geschrieben:
Danke für die Antwort, funzt irgendwie nicht bei mir. Es muss doch irgendwie möglich sein,seinen Sourcecode so zu verändern, das ich

procedure TForm1.Start_ButtonClick(Sender: TObject);

in irgendeine beliebige neu dem Projekt hinzugefügte Unit reinstecken kann.
Was Du suchst sind "partial classes", was ich nur von C# und Chrome kenne. Delphi kann das (noch) nicht.

Du könntest aber die Prozeduren in Dateien auslagern, welche Du dann über {$I filename} in die eigentliche Datei einbindest. Diese Include-Anweisung fügt den Text der entsprechenden Datei an der Stelle ein, wo die Anweisung steht. Ich weiß aber nicht, wie Delphi drauf reagiert, wenn Du die Implementation von Methoden in Include-Dateien auslagerst.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Roboman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 115

WinXP
Delphi 2005 Prof.; Delphi 6 Prof.; C++; C; Basic
BeitragVerfasst: Fr 26.05.06 10:55 
Hallo Christian S.
danke für die Antwort. Ich werd das mal ausprobieren, kann doch im Endeffekt doch nicht allzuschwer sein. Bei C und C++ legt man ne Header-Datei an lagert dort die Funktionsköpfe aus und bringt den Quellcode dann auch in ne ander *.c Datei. Naja, schlag mich mal weiter damit durch.
Wünsche allen schon mal ein schönes Wochenende.