AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamische Komponenten in MDIChild

Ein Thema von AnyKey · begonnen am 13. Aug 2009 · letzter Beitrag vom 18. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#1

Dynamische Komponenten in MDIChild

  Alt 13. Aug 2009, 11:15
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:
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;
Das hat nicht funktioniert, also habe ich ganz oben noch dies eingefügt:

Child := TfMDIChild.Create(Child) 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?

Stehe gerade ein wenig auf dem Schlauch....
Danke für eure Hilfe

Gruß
AnyKey
  Mit Zitat antworten Zitat
Benutzerbild von iKilledKenny
iKilledKenny

Registriert seit: 25. Apr 2007
Ort: Bergstrasse
49 Beiträge
 
Delphi 5 Professional
 
#2

Re: Dynamische Komponenten in MDIChild

  Alt 13. Aug 2009, 12:23
Über die Property "MdiChildren" kommst du an die ChildForms dran, das aktive Child ist das mit dem Index 0.
Alexander Stork
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#3

Re: Dynamische Komponenten in MDIChild

  Alt 14. Aug 2009, 08:56
Hi,

danke für deine Antwort, aber wie genau soll das funktionieren?
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
197 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Dynamische Komponenten in MDIChild

  Alt 14. Aug 2009, 10:00
MainForm.MDIChildren[0] oder
MainForm.ActiveMDIChild Aufpassen, beides kann u.U. nil sein! Also vorher testen:
Delphi-Quellcode:
if Assigned(MainForm.ActiveMDIChild) then begin
  Child := MainForm.ActiveMDIChild;
  Child. ...
end;
Ansgar Becker
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#5

Re: Dynamische Komponenten in MDIChild

  Alt 14. Aug 2009, 12:51
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
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
197 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Dynamische Komponenten in MDIChild

  Alt 14. Aug 2009, 13:08
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
Ansgar Becker
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#7

Re: Dynamische Komponenten in MDIChild

  Alt 14. Aug 2009, 13:22
Haha,

hatte nichts mit hellsehen zu tun....

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....

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
  Mit Zitat antworten Zitat
Benutzerbild von anse
anse

Registriert seit: 30. Okt 2006
Ort: Neuenkirchen
197 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Dynamische Komponenten in MDIChild

  Alt 14. Aug 2009, 13:57
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 .
Ansgar Becker
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Dynamische Komponenten in MDIChild

  Alt 14. Aug 2009, 14:14
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:
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;
[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]

Hoffe das hilft dir etwas
MfG
BAMatze
2. Account Sero
  Mit Zitat antworten Zitat
AnyKey

Registriert seit: 15. Apr 2008
173 Beiträge
 
#10

Re: Dynamische Komponenten in MDIChild

  Alt 17. Aug 2009, 14:40
Also, hier noch mal der gesamte Quelltext:

Delphi-Quellcode:
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;
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?!?!

Gruß und Danke
AnyKey
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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