Dynamische Komponenten in MDIChild
Hi,
ich hoffe mal ihr könnt mir bei meinem Problem helfen. Ich will aus der Mainform meiner MDI Anwendung auf einem speziellen MDIChild (dem, welches gerade aktiviert ist) eine Scrollbox und ein StringGrid dynamisch erstellen, da ich es erst zu einem bestimmten Zeitpunkt brauche. Wie kann ich das jetzt machen? Ich habe es folgender maßen versucht:
Delphi-Quellcode:
Das hat nicht funktioniert, also habe ich ganz oben noch dies eingefügt:
procedure TfMain.ActLoadKonfigExecute(Sender: TObject);
var Child : TfMDIChild; begin if FileExists(TFileOperations.GetFilePath+'Konfig.xml') then begin // die GroußBox und somit auch das RichEdit anpassen with Child.GroupBox1 do begin Child.GroupBox1.Align := alNone; Child.GroupBox1.Height := 298; Child.GroupBox1.Top := 168; end; // ScrollBox erzeugen Child.AScrollBox := TScrollBox.Create(Child); with Child.AScrollBox do begin Name := 'ScrollBox1'; Parent := Child; Left := 0; Top := 0; Width := 604; Height := 153; Anchors := [akLeft, akTop, akRight]; TabOrder := 0; end; // StringGrid erzeugen Child.ASplitGrid := TStringGrid.Create(Child); with Child.ASplitGrid do begin Name := 'StringGrid1'; Parent := Child.AScrollBox; Left := 0; Top := 0; Width := 0; Height := 0; Align := alClient; FixedCols := 0; RowCount := 2; Options := [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing]; TabOrder := 0; end; end else begin MessageBox(0,'Konfigurationsdatei wurde nicht gefunden!','Datei nicht gefunden',MB_ICONWARNING); end; end;
Delphi-Quellcode:
jetzt funktioniert zwar das Erzeugen, allerdings macht er dafür ein neues MDIChild auf, er soll die Komponenten aber in dem aktivierten einfügen. Weiß jemand wie ich das machen kann? Wie kann ich herausfinden welches MDIChild gerade aktiviert ist?
Child := TfMDIChild.Create(Child)
Stehe gerade ein wenig auf dem Schlauch.... Danke für eure Hilfe ;) Gruß AnyKey |
Re: Dynamische Komponenten in MDIChild
Über die Property "MdiChildren" kommst du an die ChildForms dran, das aktive Child ist das mit dem Index 0.
|
Re: Dynamische Komponenten in MDIChild
Hi,
danke für deine Antwort, aber wie genau soll das funktionieren? |
Re: Dynamische Komponenten in MDIChild
Delphi-Quellcode:
oder
MainForm.MDIChildren[0]
Delphi-Quellcode:
Aufpassen, beides kann u.U. nil sein! Also vorher testen:
MainForm.ActiveMDIChild
Delphi-Quellcode:
if Assigned(MainForm.ActiveMDIChild) then begin
Child := MainForm.ActiveMDIChild; Child. ... end; |
Re: Dynamische Komponenten in MDIChild
Hi,
ich hab das jetzt so ausprobiert, aber es funktioniert immer noch nicht, ich bekomme den Fehler dass TfMDIChild und TForm zwei inkompatible typen sind... gibt es noch einen anderen weg oder mach ich was falsch?? Gruß AnyKey |
Re: Dynamische Komponenten in MDIChild
Da hier keine Hellseher rumsurfen: Wenn du einen Compiler-Fehler siehst und hier fragst warum das passiert, dann poste bitte auch die betroffene Zeile Quelltext (+ relevantes von drumherum). Ansonsten solltest du das besser im Hellseher-Forum posten :)
|
Re: Dynamische Komponenten in MDIChild
Haha,
hatte nichts mit hellsehen zu tun.... :gruebel: ich hab deinen Quelltext genommen und hab als fehler das bekommen was ich geschrieben hab, der rest vom Quelltext steht ja oben. [Fehler] PrjForm_Main.PAS(217): Inkompatible Typen: 'TfMDIChild' und 'TForm' das ist der Fehler... glaub nich das dieser satz mehr hilft als der andere von mir.... :P Child ist vom Typ TfMDIChild, und wenn ich das so mache wie du gesagt hattest (was auch sehr einleuchtend klingt, ich wollte es auch so machen, wusste nur nicht wie... :( ) dann bekomme ich den oben genannten fehler, was auch einleuchtend ist warum er kommt... muss nur wissen wie ich es so machen kann das es funktioniert. Hoffe mal ihr könnt mir helfen! Gruß und schon mal ein schönes Wochenende ;) AnyKey |
Re: Dynamische Komponenten in MDIChild
Ich hab einfach keine Lust zum Raten, und irgendwas scheinst du ja offenbar falsch zu machen, deswegen poste bitte den geänderten Quellext und den relevanten Datentyp bzw. die Deklaration von TfMDIChild .
|
Re: Dynamische Komponenten in MDIChild
Ich glaube das ist ein ziemlich einfacher Fehler, wenn ich das jetzt richtig verstanden habe. Habe auch in meinem Projekt in meiner HauptbedienForm mehrere TForm als MDIChilds. Denke du musst diese auch nur als TForm deklarieren. Hab dir mal meine "Fernsteuer-Procedure" hier angehangen. Die Fehlermeldung sagt ja auch, dass dort irgendwie deine deklaration der Variable nicht stimmen kann. Also musst du ja, um die Fehlermeldung zu beseitigen einfach den Typen ändern.
Delphi-Quellcode:
[Edit] Ich bin bei der Post davon ausgegangen, dass alles seperate TForm sind mit FormStyle = FSMDIChild. Was für diese Variante spricht, ist die gleiche Ansprache (ActiveMDIChild) in meiner Procedure. Wenn dies nicht hilft, dann könnte eventuell der umgedrehte Fall zutreffen, also einfach in TfMDIChild deklarieren, weiß nur nicht, ob dir dann das ActiveMDIChild hilft, weil das eine Form als Rückgabewert zu haben scheint. [/Edit]
procedure TBedienForm.Fenstersteuern(Form: TForm);
begin if Form = ActiveMDIChild then begin case Form.WindowState of wsNormal: Form.WindowState := wsMinimized; wsMinimized: Form.WindowState := wsNormal; wsMaximized: Form.WindowState := wsNormal; end; end else begin Form.BringToFront; Form.WindowState := wsNormal; end; end; Hoffe das hilft dir etwas MfG BAMatze |
Re: Dynamische Komponenten in MDIChild
Also, hier noch mal der gesamte Quelltext:
Delphi-Quellcode:
ich habe eine MDI Anwendung als Projekt erstellt, dort gibt es wie gesagt die Klasse TfMDIChild, mit der die Childs erstellt werden. Das Problem ist jetzt, dass wenn ich in nur einem (von vielleicht 4) MDIChild, also dem Aktiven spezielle Komponenten dynamisch erzeugen will, muss ich ja wissen welches Child gerade aktiv ist. Das so zu machen: Child := fMain.ActiveMDIChild; halte ich auch für sinnvoll, soetwas in der art hatte ich mir auch schon überlegt, wusste wie gesagt nur noch nicht wie... Das Problem das jetzt dabei aber entsteht ist, das die Variable Child von eben dem Typ TfMDIChild ist und der Rückgabewert von ActiveMDIChild nunmal TForm als typ hat. Da dies inkompatibel ist kann es ja nicht funktionieren... Also meine frage, wie bekomme ich es doch noch hin das es funktioniert das Aktive Child herauszufinden um meine dynamischen Komponenten auf ihm zu erzeugen?!?!
procedure TfMain.ActLoadKonfigExecute(Sender: TObject);
var Child : TfMDIChild; begin // if FileExists(TFileOperations.GetFilePath+'Konfig.xml') then begin if Assigned(fMain.ActiveMDIChild) then begin Child := fMain.ActiveMDIChild; // die GroußBox und somit auch das RichEdit anpassen with Child.GroupBox1 do begin Child.GroupBox1.Align := alNone; Child.GroupBox1.Height := 298; Child.GroupBox1.Top := 168; end; // ScrollBox erzeugen Child.AScrollBox := TScrollBox.Create(Child); with Child.AScrollBox do begin Name := 'ScrollBox1'; Parent := Child; Left := 0; Top := 0; Width := Child.Width - 9; Height := 153; Anchors := [akLeft, akTop, akRight]; TabOrder := 0; end; // StringGrid erzeugen Child.ASplitGrid := TStringGrid.Create(Child); with Child.ASplitGrid do begin Name := 'StringGrid1'; Parent := Child.AScrollBox; Left := 0; Top := 0; Width := 0; Height := 0; Align := alClient; FixedCols := 0; RowCount := 2; Options := [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing]; TabOrder := 0; end; end; // end; // else begin MessageBox(0,'Konfigurationsdatei wurde nicht gefunden!','Datei nicht gefunden',MB_ICONWARNING); end; end; Gruß und Danke AnyKey |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz