| Autor |
Beitrag |
gelson
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 03.02.09 20:39
Ich benutze Delphi 7 und habe ein Formular (Form1) mit den einzelnen Feldern der Tabelle die es anzeigt. Ich habe auch ein Form2 und ein Form3. In diesen beiden Formularen mache ich unterschiedliche Abfragen und möchte sie dann wieder in Form1 anzeigen lassen. Meine Frage ist jetzt, wie merkt Form1 von wo her es aufgerufen wird? Ich habe leider bisher nichts passendes im Forum gefunden. Vielen Dank für Eure Hilfe.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 03.02.09 20:44
Hallo und  !
Der beste weg wäre wohl deine beiden weiteren Formulare mit ShowModal anzuzeigen, dann kannst du danach direkt Code schreiben, der danach ausgeführt werden soll.
Denn ich liege doch richtig, wenn ich annehme, dass die beiden anderen Formulare praktisch wie Dialoge verwendet werden, oder?
Dann kannst du das so machen: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button1Click(Sender: TObject); begin if Form2.ShowModal = mrOk then begin ShowMessage('In Form2 wurde Ok gedrückt!'); end else ShowMessage('In Form2 wurde nicht Ok gedrückt!'); end;
procedure TForm2.btnOkClick(Sender: TObject); begin ModalResult := mrOk; end; |
|
|
gelson 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 03.02.09 20:47
Das ging aber schnell. Vielen Dank. Probier ich grad mal aus.
|
|
gelson 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 03.02.09 20:50
Also die beiden anderen Formulare sind mit SQL Abfragen gespickt. Auf beiden Formularen werden die gefundenen Datensätze in einem DBGRID angezeigt und wenn ich dann einen Doppelklick auf einen Eintrag im DBGRID mache soll Form1 den Datensatz anzeigen.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Di 03.02.09 21:21
du kannst innerhalb von Form2 auch auf die Komponenten von Form1 zugreifen (ich glaub mal du meinst das so)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| uses [...], unit1
[...] procedure bla(); begin Form1.Label1.Caption := 'Form2 sagt: "Hallo Welt"!'; end; |
|
|
gelson 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 03.02.09 21:43
Nein nicht ganz. Das mit dem ShowModal ist schon nicht schlecht. Form1 muss einfach wissen von welchem der beiden Forms es gerade aufgerufen wird. Ich habe das nun so gemacht wie oben beschrieben. Jetzt ist es so, dass sobald ich auf den Datensatz im DBGrid des Form2 doppelklicke, erscheint kurz Form1 - verschwindet wieder und Form2 erscheint wieder.
Der Code in Form2 sieht so aus, wenn man einen Doppelklick auf einen Datensatz macht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm2.DBGrid1DblClick(Sender: TObject); var result : integer;
begin result := 6; Form2.Close; Form1.Show; end; |
Der Code in Form1 sieht nun so aus:
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: 49: 50: 51: 52:
| procedure TForm1.FormActivate(Sender: TObject); begin
if Form6.ShowModal = 6 then begin Table1.Open; Table1.SetKey; Table1.FieldByName('Name').AsVariant := Form2.DBGrid1.SelectedField.Value; Table1.GotoNearest; end;
Edit26.Text := VarToStr(Table1['T-Nummer']); Edit27.Text := VarToStr(Table1['GPN']); Edit1.Text := VarToStr(Table1['ITSP4']); Edit28.Text := VarToStr(Table1['PM1']); Edit13.Text := VarToStr(Table1['OldLM']); Edit25.Text := VarToStr(Table1['NewLM']); Label21.Caption := VarToStr(Table1['Von']); Label22.Caption := VarToStr(Table1['Nach']); Label24.Caption := VarToStr(Table1['Owner']);
Edit2.Text := VarToStr(Table1['Request_start']); Edit3.Text := VarToStr(Table1['Approval_start']); Edit4.Text := VarToStr(Table1['Transferfolder_start']); Edit14.Text := VarToStr(Table1['Request_done']); Edit15.Text := VarToStr(Table1['Approval_done']); Edit16.Text := VarToStr(Table1['Transferfolder_done']);
Edit5.Text := VarToStr(Table1['Export_start']); Edit6.Text := VarToStr(Table1['MBX_close_start']); Edit7.Text := VarToStr(Table1['GAL_Sync1_start']); Edit17.Text := VarToStr(Table1['Export_done']); Edit18.Text := VarToStr(Table1['MBX_close_done']); Edit19.Text := VarToStr(Table1['GAL_Sync1_done']);
Edit8.Text := VarToStr(Table1['MBX_open_start']); Edit9.Text := VarToStr(Table1['GAL_Sync2_start']); Edit10.Text := VarToStr(Table1['Import_start']); Edit20.Text := VarToStr(Table1['MBX_open_done']); Edit21.Text := VarToStr(Table1['GAL_Sync2_done']); Edit22.Text := VarToStr(Table1['Import_done']);
Edit11.Text := VarToStr(Table1['Transfer_delete_start']); Edit12.Text := VarToStr(Table1['Feedback_start']); Edit23.Text := VarToStr(Table1['Transfer_delete_done']); Edit24.Text := VarToStr(Table1['Feedback_done']);
end; |
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 03.02.09 21:50
Wieso nimmst Du kein Datenmodul? Das Dataset, das das Grid anzeigt, steht ja nach dem Klick auf dem betreffenden Datensatz, welchen Du im anderen Formular doch einfach wieder verwenden könntest.
|
|
gelson 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 03.02.09 22:06
Ich bin ja noch nicht der Hirsch auf Delphi. Ich verstehe nicht was Du meinst.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 04.02.09 09:30
Statt die datengebundenen nichtvisuellen Komponenten auf die Formulare zu verteilen, könntest Du sie auf ein Datenmodul legen, damit sie zentral erreichbar sind. Ich habe hier gerade nur Delphi 5 zur Verfügung, dessen Hilfe sagt dazu:
| Zitat: | TDataModule zentralisiert die Verwaltung nicht visueller Komponenten in einer Anwendung.
Unit
forms
Beschreibung
Mit einem Datenmodulobjekt stellen Sie in Ihrer Anwendung eine zentrale Möglichkeit zum Verwalten der nicht visuellen Komponenten bereit. Normalerweise werden hier die Datenzugriffskomponenten (TSession, TSessionList, TDatabase, TTable, TQuery, TStoredProc und TBatchMove) angegeben, Sie können aber auch andere Komponenten wie TTimer, TOpenDialog, TImageList oder TOleContainer hinzufügen.
Während des Entwurfs dient ein TDataModule-Objekt als visueller Container, in den ein Entwickler nicht visuelle Komponenten einfügen, deren Eigenschaften festlegen und Ereignisbehandlungsroutinen schreiben kann. über den Menübefehl Datei|Neues Datenmodul können Sie ein Datenmodul erstellen.
In der Unit-Datei des Datenmoduls kann auch die der Anwendung zugrundeliegende Geschäftslogik definiert werden.
Damit das Datenmodul für eine andere Unit in der Anwendung verfügbar ist, wählen Sie zuerst die betreffende Unit aus, und wählen Sie anschließend Datei|Unit verwenden. Dadurch wird das Modul in die uses-Klausel der Unit aufgenommen. |
|
|
gelson 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 06.02.09 13:17
Give that man a price !!
DeddyH, war eine Klasse Idee mit dem DataModule. Klappt hervorragend. Vielen Dank für Deine Hilfe.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 06.02.09 14:28
Das Ding gibt es ja nicht umsonst, da hat sich Borland damals schon etwas dabei gedacht 
|
|