Autor |
Beitrag |
Holg_i
      
Beiträge: 79
|
Verfasst: Do 29.04.10 10:54
Nun ich mal wieder mit einer Frage.
Wie ich auf ein MDI-Form zugreife beziehungsweise auf dessen Objekte ist mir nun klar.
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:
| procedure TForm1.Auslesen(Sender: TObject);
var Le, To,I: Integer; AForm: TForm; Eingabe1, FensterName: ShortString; MyInteger: Array[0..10] of Integer;
begin
.... .... AForm:=MdiChildren[i];
FensterName:=AForm.Caption; Le:=AForm.Left; To:=AForm.Top; Eingabe1:=TEdit(AForm.FindComponent('Eingabe1')).Text;
For I:=0 to 10 do Begin MyInteger[I]:=AForm.DasArray[I]; end; end; |
Und da stellt sich meine Frage. Wo deklariere ich DasArray im MDI so das es nur das MDI und das übergeordnete MDI-Fenster kennt. Und wie greife ich vom übergeordneten MDI-Fenster darauf zu.
Jemand eine Idee????
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 29.04.10 11:47
Ich nehm an das du das Array als private-Variable definiert hast. bzw hoff ich es das es so ist. dementsprechend kannst du dir ne Function definieren die einfach das Array als Rückgabewert hat. also
Delphi-Quelltext 1: 2: 3: 4:
| function TfrmChild.getArray(): Array of integer; begin result := DasArray; end; |
und im anderen Formular dann:
Delphi-Quelltext 1:
| MyInteger := AForm.getArray(); |
sollte eigentlich so funktionieren.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Do 29.04.10 11:52
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Do 29.04.10 11:53
Ausserdem musst du noch auf die richtige Klasse casten, denn TForm kennt das Array natürlich nicht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Auslesen(Sender: TObject); var Le, To,I: Integer; AForm: TfrmChild; begin [..] if MdiChildren[i] is TfrmChild then begin AForm:=MdiChildren[i] as TfrmChild; [..] |
|
|
Holg_i 
      
Beiträge: 79
|
Verfasst: Do 29.04.10 12:19
Ich hätte eventuell noch aufzeigen sollen das ich Delphi4 besitze... also nix mit TfrmChild
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Do 29.04.10 12:25
Für Copy&Paste-Lösungen hast Du halt zu wenige Informationeen geliefert
Überleg mal von welchem Typ dein MDI-Child ist, und ob es nicht Sinn macht diesen Typ dann auch da einzusetzen.
|
|
Holg_i 
      
Beiträge: 79
|
Verfasst: Do 29.04.10 12:32
Neee ich suche keine Copy&Past-Lösung halt ansätze wie ich ran gehen könnte.
Ich könnte mir ein TString basteln.. der ist dan ein Objekt und auf diesen könnte ich zugreifen.
Ist aber nicht die feine Englische-Art.
Also überlege ich mal.
Mein MDI ist vom Type TForm
TForm kennt natürlich nur die Typen die in Im deklariert sind und sich selber schon klar. Und weil ich mit diesen überlegungen nicht weiter komme.. befragte ich das Forum.
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Do 29.04.10 12:39
Holg_i hat folgendes geschrieben : | Mein MDI ist vom Type TForm |
Dann gibt es da auch kein TEdit oder sonstwas. TForm ist einfach nur ein "leeres Fenster". Deswegen hast Du bestimmt auch eine Klasse type <HierNameEinsetzen> = class(TForm) erstellt. Hergeleitet von TForm, aber mit weiteren Eigenschaften ergänzt.
PS: Dir fehlen die Grundlagen, Du solltest Dich mal nach einigen Tutorials umsehen.
|
|
Holg_i 
      
Beiträge: 79
|
Verfasst: Do 29.04.10 12:51
Das hilft nun ernorm weiter......
Welche Tutorials die mir in meinem Problem weiter helfen könnten hättest du als vorschlag?
Tedit kennt es da wie ich Tippte:
Zitat: | TForm kennt natürlich nur die Typen die in im deklariert sind |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| type TForm2 = class(TForm) Eingabe1: TEdit; ... ... ... |
Wie getippt kann ich ja auf Eingabe1 klasse zugreifen
Delphi-Quelltext 1:
| Eingabe1:=TEdit(AForm.FindComponent('Eingabe1')).Text; |
Mir geht es nun um ein Array welches ich auch benutze
Delphi-Quelltext 1:
| DasArray: Arry[0..10] of Integer; |
Wie auch getippt könnte ich mir nun eine Memo erstellen dieses unsichtbar machen und darin die 10 Integer verwalten und darauf zugreifen. Aber das ist doch keine Art
So versuche ich mit hilfe des Forums für mich und anderen die hier mal lesen eine Lösung zu finden.
Dein Lösung= Lest mehr
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Do 29.04.10 13:05
Holg_i hat folgendes geschrieben : | Delphi-Quelltext 1: 2:
| type TForm2 = class(TForm) |
|
<HierNameEinsetzen> ?
TEdit "kennt" nicht das Formular sondern die Unit, da unter "uses" eine Unit eingebunden ist in der die Klasse(der Typ) TEdit deklariert ist. Das Formular kennt die Instanz "Eingabe1" vom Typ "TEdit".
Was ist eine Klasse, was ist eine Instanz.. die Grundlagen der objektorientierten Programmierung fehlen noch. Du klickst auf "Datei - Neu - Formular", aber Du hast noch nicht verstanden was Du da tust (Erstellen einer neuen Klasse, abgeleitet von TForm). Das ganze "FindComponent" brauchst Du nicht wenn Du einfach mit Deinem selbsterstellten(!) Formulartyp arbeitest.
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Do 29.04.10 13:06
Da der Code von deinem MDI Fenster nicht bekannt war, hatte elundril einfach TfrmChild genommen.
Wenn du nun in TForm1.Auslesen dein MDIChild auf TForm2 castest, kannst du auf alle Eigenschaften zugreifen und brauchst auch dein Edit nicht mit FindComponent suchen.
|
|
Holg_i 
      
Beiträge: 79
|
Verfasst: Do 29.04.10 13:11
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Do 29.04.10 13:45
Hier dann mal die nötigen Änderungen:
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:
| Implementation uses .... , Unit2;
[..]
procedure TForm1.Auslesen(Sender: TObject); var Le, To,I: Integer; AForm: TForm2; Eingabe1, FensterName: ShortString; MyInteger: Array[0..10] of Integer; begin .... .... if MdiChildren[i] is TForm2 then begin AForm:=MdiChildren[i] as TForm2; FensterName:=AForm.Caption; Le:=AForm.Left; To:=AForm.Top; Eingabe1:=AForm.Eingabe2.Text;
For I:=0 to 10 do Begin MyInteger[I]:=AForm.DasArray[I]; end; end; end; |
|
|
Holg_i 
      
Beiträge: 79
|
Verfasst: Do 29.04.10 14:18
@SvenAbeln & @Tryer
Danke euch für die Hilfe... Habe echt auf dem Schlauch gestanden und bin schon lange am umsetzen.
Klar ist mir nun da ich von TForm abgleitet habe und nicht von TForm2 das ich nix von TForm2 kennen konnte und daher auch mit FindComponent suchen musste.
Die Antwort ist also ganz kurz nicht von TForm ableiten sondern von dem jeweiligen MDI in diesem Fall TForm2.....
Ja so ist es und ich habe mich durch TfrmChild verwirren lassen und dachte da total falsch... Sorry.
|
|