Autor |
Beitrag |
master_mane
Hält's aus hier
Beiträge: 4
|
Verfasst: So 18.10.09 13:00
Code auslagern mit Zugriff auf Objekte der Hauptdatei
Guten Mittag,
Wie man Funktionen/Prozeduren in eine separate Unit auslagert und anschließend einbindet, solange kein Zugriff auf ein Objekt der Hauptdatei besteht, habe ich mittlerweile kapiert.
Wenn ich aber z.B. eine Prozedur auslagern möchte, die eine Buttonbeschriftung ändert, bringt er mir immer Tausende von Fehlern
Diese kann ich dann durch einbinden der Type-Deklaration und Co, was ja eigentlich logisch ist, soweit reduzieren, dass Borland nurnoch über i.eine forward oder external Deklaration der Prozedur bzw. Funktion mekert.
Ich weiß nicht, ob mein Ansatz korrekt ist, und wie man es richtig macht.
Codebeispiel Hauptdatei:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2;
type TForm1 = class(TForm) btn_click: TButton; procedure btn_clickClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn_clickClick(Sender: TObject); begin ChangeCaption(); end;
end. |
Delphi-Quelltext 1: 2: 3: 4:
| procedure ChangeCaption(); begin btn_click.Caption := 'klick mich'; end; |
Es soll beim Klicken auf den Button "btn_klick" die Prozedur "ChangeCaption" aus Unit2 aufgerufen werden.
Was muss ich in Unit1, was in Unit2 schreiben, dass das Ganze funktioniert wie es soll?
Codebeispiele wären sehr Hilfreich!
Vielen Dank,
Manuel
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 18.10.09 13:50
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 18.10.09 13:55
Besser wäre es aber alles was in den ausgelagerten Routinen benötigt wird auch mitzugeben. Sonst wird das schnell sehr unübersichtlich, wenn von überall auf irgendetwas zugegriffen wird...
|
|
master_mane 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 18.10.09 14:01
Danke, Jakob!
Zumindest einmal die "forward"-Fehlermeldungen bleiben aus, allerdings sagt er jetzt bei mir "[Fehler] Unit1.pas(29): Undefinierter Bezeichner: 'ChangeCaption'"...
Und wie macht man das, jaenicke?
Danke für die Antworten!
Lieben Gruß,
Manuel
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 18.10.09 14:04
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 18.10.09 14:07
Ja, das wäre eine Möglichkeit.
Ich muss gestehen, dass ich einen Fehler gemacht habe: Wenn man das ChangeCaption auch außerhalb von Unit2 verwenden will, schreibt man das noch bei interface mit rein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| unit Unit2
interface
uses SysUtils, ...;
procedure ChangeCaption; implementation
uses Unit1
procedure ChangeCaption; begin ... end;
end. |
|
|
master_mane 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 18.10.09 14:19
Parameter zu verwenden ist natürlich noch besser! Danke, das werde ich machen!
Jetzt sagt Borland allerdings in Unit2, der Button (bzw. bei Parameterübergabe der TButton) wäre ein "undefinierter Bezeichner"...
Liebe Grüße,
Manuel
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 18.10.09 14:23
Halte einmal die Maus in der Formularunit über TButton, dann siehst du (bei einigermaßen modernen Delphiversionen), dass der in der Unit StdCtrls deklariert ist. Also musst du in der anderen Unit die StdCtrls ebenfalls in die uses legen.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 18.10.09 14:29
jaenicke hat folgendes geschrieben : | Halte einmal die Maus in der Formularunit über TButton, dann siehst du (bei einigermaßen modernen Delphiversionen) |
Bei älteren Versionen kann man auch einfach TButton in der Hilfedatei suchen.
|
|
master_mane 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 18.10.09 14:45
Dankeschön euch Beiden
Es funktioniert einwandfrei.
Schön, dass ihr so viel Geduld mit mir hattet.
Lieben Gruß,
Manuel
|
|
|