Autor Beitrag
Ruachel
Hält's aus hier
Beiträge: 14

Win XPpro SP2, WIN2000
D6 Pers
BeitragVerfasst: Fr 27.02.09 15:41 
Hallo zusammen,

Ich möchte gerne aus meiner Hauptform(frmMain) ein weiteres Formular(frmDetail) aufrufen, dabei aber Parameter übergeben.

Dazu habe ich folgendes gemacht(in vereinfachter Form):


in der aufrufenden unit:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
//unit frmMain
.
.
.


procedure TNavigation.LookOutButton22Click(Sender: TObject);
var
KomponenteEdit:TKomponente_Detail; //die unit frmDetail
begin

KomponenteEdit:=TKomponente_Detail.Create(self,'neu',''); 

//also eine leere Maske (self,'edit','4') wäre zum Editieren eines Datensatzes

KomponenteEdit.Visible:=false;
KomponenteEdit.ShowModal;


end;


in der aufgerufenen unit:

ausblenden volle Höhe Delphi-Quelltext
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:
type
     TKomponente_Detail    = class(TForm)
        Edit1:TEdit;
        ButtonSpeichern:TButton
        procedure ButtonSpeichernClick(Sender: TObject);
        procedure InsertKomp;
     public

        constructor create(aOwner : tComponent;mode:string;UID:string); virtual;
    end;

var
Komponente_Detail:TKomponente_Detail;

   implementation

...
    constructor myForm.create(AOwner:TComponent,parm:string;UID:string);
    begin
       inherited create(AOwner);
       
    end;


...

...

   procedure TKomponente_Detail.ButtonSpeichernClick(Sender: TObject);
   begin
   showmessage(Komponente_Detail.Edit1.Text);  //<----- hier knallts

   end;


Die Programmierhilfe springt darauf an, der Compiler meckert auch nicht, aber
zur Laufzeit krieg ich eine Access violation, wenn ich auf Buttonspeichern klicke..


Nun der Hintergrund ist, dass ich an einer kleinen Datenbankanwendung (Absolute Database) schreibe und in mein Hauptfenster wie eine Webseite aufgebaut habe.

Also links die Navigation, rechts der Inhalt.

Bei oben angeführtem Konstrukt geht es darum, eine Eingabemaske (modal) für einen Datensatz aufzurufen.
Je nach gedrücktem Button soll entweder eine leere Maske angezeigt werden, oder eine mit bereits gefüllten Werten aus der Datenbank (zum editieren).

Ich habe das mittlerweile mit 2 Globalen Variablen gelöst, finde das aber nicht sehr schön und vermute, dass das Mißlingen auf diesem Weg an meinen mangelnden OOP_Kenntnissen liegt.

Deswegen: Kann mir da wer auf die Sprünge helfen ?

Wäre für Hinweise sehr dankbar.

greetz


Ruachel
Ruachel Threadstarter
Hält's aus hier
Beiträge: 14

Win XPpro SP2, WIN2000
D6 Pers
BeitragVerfasst: Fr 27.02.09 18:01 
Hallo,

Das Problem hat sich erledigt.

Nach einer Antwort in einem anderen Forum hab ich den Code nochmal versucht, und
es gab kein Problem mehr...

Ich kann nicht sagen worans lag, vielleicht hatte mein Delphi gestern seine Tage..


EDIT sagt:

Nun, es gab aber doch ein Problem:

Der Aufruf:
ausblenden Delphi-Quelltext
1:
showmessage(Komponente_Detail.Edit1.Text);  //<----- hier knallts					


geht ins Leere, weil so eine Instanz nicht existiert (Formular wird nicht automatisch erzeugt und der Aufruf aus der Hauptunit erzeugt KomponenteEdit.Edit1.TXT).

Die Programmierhilfe und der Compiler merken das natürlich nicht.

Also so:

ausblenden Delphi-Quelltext
1:
showmessage(Edit1.Text);  //<----- hier knallts nicht					


eigentlich eine einfache Sache, ich dachte es liegt irgenwie am neuen constructor.


greetz


Ruachel


Zuletzt bearbeitet von Ruachel am Sa 28.02.09 00:55, insgesamt 1-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 27.02.09 18:18 
user profile iconRuachel hat folgendes geschrieben Zum zitierten Posting springen:
Ich einer Antwort in einem anderen Forum...

Wenn du die Frage in mehreren Foren stellst, solltest du das mit angeben, damit sich nicht alle Leute den Kopf zerbrechen, obwohl das Problem (im anderen Forum) schon gelöst wurde...

_________________
PROGRAMMER: A device for converting coffee into software.
Ruachel Threadstarter
Hält's aus hier
Beiträge: 14

Win XPpro SP2, WIN2000
D6 Pers
BeitragVerfasst: Fr 27.02.09 20:15 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:

Wenn du die Frage in mehreren Foren stellst, solltest du das mit angeben, damit sich nicht alle Leute den Kopf zerbrechen, obwohl das Problem (im anderen Forum) schon gelöst wurde...


Deswegen hab ich auch sofort hier den grünen Haken ans Thema gemacht und
die "Lösung" gepostet ;-)

greetz

Ruachel
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 27.02.09 20:19 
Besser ist es gleich die Crossposts beim Fragen zu verlinken, dann kann man auch selbst schauen, ob das was man schreiben will vielleicht schon an anderer Stelle diskutiert wurde.
In manchen Foren wird dir, wenn du das unterlässt, dein Thema auch gleich ganz geschlossen. Gern gesehen ist es jedenfalls nie, auch wenn hier nicht gleich das Thema geschlossen wird. ;-)