Autor |
Beitrag |
GigaNeko
      
Beiträge: 51
|
Verfasst: Sa 03.02.07 19:40
hi, ich hab ein programm geschrieben in dem ich 2 units benutze. in der ersten unit befindet sich eine selbstgeschriebene prozedure. nun möchte ich es aber so haben, dass sobald eine procedur in den unit 2 abgelaufen ist die selbstgeschriebene procedure aus unit 1 gestartet wir. wie mache ich das? Moderiert von Christian S.: Topic aus Sonstiges (Delphi) verschoben am So 04.02.2007 um 11:31
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 03.02.07 19:48
einfach, in dem du in unit drei folgenden code einfügst und diesen code aufrufst:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure starte_funktion_aus_unit2_dann_aus_unit1; begin unit2.deinefunktion; unit1.deinefunktion; end; |
|
|
Fabian E.
      
Beiträge: 554
Windows 7 Ultimate
Visual Studio 2008 Pro, Visual Studion 2010 Ultimate
|
Verfasst: Sa 03.02.07 20:01
oder
uses ....,unit1,... bei unit 2
Delphi-Quelltext 1: 2: 3: 4:
| TForm2.procedurxyz(); begin procedure_aus_unit1; end; |
|
|
GigaNeko 
      
Beiträge: 51
|
Verfasst: So 04.02.07 12:25
unter implementation bei uses steht aber schon bei unit1, dass unit2 verwendet wird und andersherum auch.
da steht immer:
[Fehler] UNT_pingu.pas(120): Undefinierter Bezeichner: 'dateisichern_l'
UNT_pingu ist unit2 und dateisichern_l ist meine procedure in unit1 (UNT_main)
Zuletzt bearbeitet von GigaNeko am So 04.02.07 12:33, insgesamt 1-mal bearbeitet
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: So 04.02.07 12:32
So, wie deine Fragestellung zu verstehen ist, hast du alle möglichen Antworten bekommen. Wenn deine Uses-Anweisungen breits ausreichend sind, na, umso schöner.
Wenn jetzt irgendwas nicht funktioniert oder du irgendetwas nicht verstanden haben solltest, müsstest du mal gezielt nachfragen. Am besten mit Beispielcode.
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: So 04.02.07 12:33
und das wichtigste, was ich ewig lang nicht gewusst habe ist, dass deine procedure im interface-Abschnitt deklariert ist!
So ungefähr:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| unit unit1;
interface
procedure MyProc;
implementation
procedure MyProc; begin ShowMessage('Ausgeführt'); end;
end. |
|
|
GigaNeko 
      
Beiträge: 51
|
Verfasst: So 04.02.07 12:40
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: 32: 33: 34: 35: 36: 37:
| unit UNT_main; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Grids;
type TFRM_main = class(TForm) LBL_tempo: TLabel; COB_tempo: TComboBox; BTN_start: TBitBtn; LBL_treffer: TLabel; LBL_drehungen: TLabel; LBL_fehler: TLabel; LBL_c: TLabel; LBL_highscore: TLabel; SGR_highscore: TStringGrid; procedure BTN_startClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure COB_tempoChange(Sender: TObject); private public end;
var FRM_main: TFRM_main;
implementation
uses UNT_pingu;
{$R *.dfm} |
und hir unit2
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: 32: 33: 34: 35: 36: 37: 38:
| unit UNT_pingu;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls, Buttons;
type TFRM_pingu = class(TForm) IMG_8: TImage; IMG_7: TImage; IMG_6: TImage; IMG_5: TImage; IMG_4: TImage; IMG_3: TImage; IMG_2: TImage; IMG_1: TImage; TMR_timer: TTimer; procedure TMR_timerTimer(Sender: TObject); procedure IMG_1Click(Sender: TObject); procedure FormShow(Sender: TObject); private FRM_pingu: TFRM_pingu; i, treffer, pinguup, fehler : integer; public procedure drehen; end;
var FRM_pingu: TFRM_pingu;
implementation
uses UNT_main;
{$R *.dfm} |
wo muss ich meine selbstgeschriebenen proceduren (dateisichern_l, dateiladen_l) aus UNT_main hinschreiben damit ich sie in UNT_pingu verwenden kann?
(meine fragestellung entwas konkreter)
die aufgabe der ich im moment nachgehe ist objektorientierte programmierung und deshalb komm ich ich mit diesen ganzen sachen irgendwie durcheinander.
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: So 04.02.07 12:51
GigaNeko hat folgendes geschrieben: | wo muss ich meine selbstgeschriebenen proceduren (dateisichern_l, dateiladen_l) aus UNT_main hinschreiben damit ich sie in UNT_pingu verwenden kann? |
das kommt darauf an, ob deine beiden Proceduren ( dateisichern_l, dateiladen_l) zu der Klasse aus UNT_main ( TFRM_main) gehören sollen, oder allgemein zur Unit UNT_main.
Wenn die Proceduren allgemein zur Unit UNT_main gehören sollen, dann sollte die UNT_main so aussehen:
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: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| unit UNT_main; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Grids;
type TFRM_main = class(TForm) LBL_tempo: TLabel; COB_tempo: TComboBox; BTN_start: TBitBtn; LBL_treffer: TLabel; LBL_drehungen: TLabel; LBL_fehler: TLabel; LBL_c: TLabel; LBL_highscore: TLabel; SGR_highscore: TStringGrid; procedure BTN_startClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure COB_tempoChange(Sender: TObject); private public end;
procedure dateisichern_l; procedure dateiladen_l;
var FRM_main: TFRM_main;
implementation
uses UNT_pingu;
{$R *.dfm}
procedure dateisichern_l; begin end;
procedure dateiladen_l; begin end; |
Nun müsstest du die beiden proceduren aus der anderen Unit UNT_pingu ohne Fehler aufrufen können.
|
|
GigaNeko 
      
Beiträge: 51
|
Verfasst: So 04.02.07 13:20
jo das geht danke. und wie ist das mit den variabeln aus der anderen unit, falls ich die auch mal brauche?
|
|
Jakob Schöttl
      
Beiträge: 929
Erhaltene Danke: 1
Delphi 7 Professional
|
Verfasst: So 04.02.07 13:24
die müssen so deklariert sein, wie bei dir das bereits existierende
Delphi-Quelltext 1: 2:
| var FRM_main: TFRM_main; |
also im Interface-Abschnitt vor der Implementation. Das kann dann zB. so aussehen:
Delphi-Quelltext 1: 2: 3:
| var FRM_main: TFRM_main; aVariable: integer; |
Allerdings musst du immer überlegen, ob die Variable wirklich nur zur Unit gehört (also so wie in meinem Beispiel), oder ob sie doch zur Klasse TFRM_main gehört. In diesem Fall schreibt man die Variable dann im public-Bereich.
|
|
MSC
      
Beiträge: 63
Win XP Home, Win Vista Buisiness
Delphi 7 Enterprise
|
Verfasst: So 04.02.07 14:07
Also ich mache mir das immer recht einfach, wenn ich ne 2., 3. usw. unit verwenden möchste:
Zuerst habe ich die Unit1, dann gehe ich auf Datei > Neu > Formular.
So, dann habe ich 2 Units und formulare.
Dann gehe ich in Unit1 auf Datei > Unit verwenden... Unit2 auswählen.
Dann das ganze noch für Unit2 machen, fertig.
Dann ist gibt es idR. keine Probleme mit Prozeduren und Variablen aus anderen Units
|
|
|