Autor Beitrag
scape
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 21.07.02 04:52 
Hallo!

Ich hab ein Problem das es wirklich in sich hat, darüberhinaus habe ich das Problem selber erstellt und kann es nun nicht mehr lösen. Verdammt! Brauche echt Hilfe.

Mein Problem:
Ich habe ein Programm mit mehreren Forms, wovon aber nur 2 relevant sind: formMain und formConEdit.

Die Fakten:

1. Unter Projekt -> Optionen ist als automatisch erstelltes Form als einziges formMain eingetragen, dementsprechend wird formMain auch am Anfang direkt sichtbar erstellt. Alles in Ordnung.

2. Auch im Project Code File ist formMain durch den Code Application.CreateForm(TformMain, formMain); als einziges zum Createn eingetragen.

3. Da ich nun meine formConEdit dynamisch im Programm aufgrund eines ButtonOnClick Events erzeugen will, steht dort folgender Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TformMain.buttonBlaClick(Sender: TObject);
begin
                formConEdit := TformConEdit.Create(self);
                try
                        formConEdit.ShowModal;
                finally
                        formConEdit.Free;
                end;
end;


So. Und damit hat bereits alles wunderbar geklappt.


Warum nicht mehr? Was ist eigentlich mein Problem? Ja. Das frage ich mich auch. Denn:

Ich habe eigentlich nur ein bissel mit den form properties im Objektinspektor "herumgespielt", sprich ich habe das Programm mal mit anderen formStyles, nämlich MDIForm und MDIChild kompiliert, was aber natürlich nicht wirklich was brachte. Daraufhin habe ich das Programm wieder zurückgestellt, nämlich auf fsNormal. Bei allen Forms.

Und siehe da, ich bekomme auf einmal nach dem compilen die seltsamsten Fehlermeldungen.

Wenn ich nämlich nun auf den Button zum Createn des Fensters klicke (wie oben geschildert, das ist der OriginalCode), bekomme ich zuerst eine Zugriffsverletzung und danach wird mir gesagt: "Aus einem sichtbaren Fenster kann kein modales gemacht werden".

Häää??? Es ist doch noch garnicht sichtbar. Jeder Ratschlag, nochmal die automatischen Erzeugungsparameter zu checken, ist sinnlos, das habe ich schon öfter gemacht als im Winter Schneeflocken fallen.

Aber das war natürlich noch nicht alles. Denn: Setze ich nun die Form - um den alten Zustand hinzubekommen damit das Programm überhaupt läuft - in die automatische Erstellung und sage dem Programm anstelle des ganzen Create Krams (was ich im übrigen nicht nur mit self sondern auch mit application und formMain gecheckt habe) einfach nur formConEdit.ShowModal; dann bekomme ich genau den selben Mist!

Im Übrigen schmiert sogar Delphi beim Ausführen des Programms auf einmal mitunter gern ab so dass ich das erst nach dem compilen extern alles rausbekomme.


WER KANN MIR HELFEN?? - Ich knuddel denjenigen auch ganz lieb! Ist echt lebensnotwendig, ich zweifle inzwischen an meinem Verstand!

Gibts irgend ne komische Eigenschaft die ich übersehen habe?? Im Übrigen fuchtel ich sonst im ganzen Programm nicht mit forms oder creates herum, so dass auch da kein Fehlerpotential entstehen kann. Und ich weise nochmal darauf hin dass es vorher ging ! *help* :(

ein verzweifelter scape[/b]
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: So 21.07.02 10:01 
Als Idee hätte ich da folgendes. Aber ob das etwas nützt :?:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TformMain.buttonBlaClick(Sender: TObject); 
Var
  Form: tFormConEdit;
begin 
        Form := TformConEdit.Create(self); 
        try 
            Form.ShowModal; 
        finally 
            Form.Free; 
        end; 
end;
So mach ich das immer und bislang hat es immer funktioniert. Prüf noch mal ob auch alles FormStyles auf fsNormal stehen.

Gruß
scape Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 21.07.02 12:51 
Nein nützt nix.. ich bin echt am Ende, der Code ist 8000 Zeilen lang und nun funktioniert da nichts mehr.. das gibts doch nicht

ändert Delphi beim Umstellen auf MDI's irgendwas anderes mit an den Forms?

Ah und noch eine Frage, kann es vielleicht sein dass das CREATEN des Fensters automatisch deshalb ein SHOW nach sich zieht ? Aus irgend einem Grund nach dem Umstellen ??
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: So 21.07.02 13:39 
Wenn Du ein MDI-Child-Fenster so erzeugst:
ausblenden Quelltext
1:
Form := tMDIChild.Create (Application.MainForm);					

Dann wird dieses auch sofort angezeigt.

Wenn Du möchtest kannst Du mir mal dein Projekt per E-Mail zu schicken. Dann schau ich mal ob ich etwas finde!

Gruß
TINO
scape Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 21.07.02 13:56 
Hmm mal schaun!

Ich hab das Problem nun noch weiter eingegrenzt. Offensichtlich schmiert die Anwendung bei JEDEM Erstellen eines neuen Fensters ab, bzw. wenn man dann ShowModal sagt. Es ist so als wäre das Fenster "halb" da, direkt anzeigen kann ich es NICHT dh es kann nicht bereits created sein, wenn ich es create sagt er dann aber im darauffolgenden showmodal dass es bereits sichtbar wäre. Und zwar bei jeder Form die ich erzeuge; alle sind fsNormal, keine MDI Children und das mainForm ist auch kein MDI Parent / Form, sondern alles sind nur ganz normale Standard Forms.
scape Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 21.07.02 14:00 
Ah und noch was seltsames.

Wenn ich die Form ins autocreate reinpacke, wird sie sofort nach Programmstart angezeigt. Kann es sein dass der Delphi Compiler sche**** baut ?? Das gibts doch nicht.. oder rafft der jetz irgendwie nicht mehr dass es kein MDIChild ist ??
Burgpflanze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67

Windows2000 Prof. SP4
Delphi7 Enterprise
BeitragVerfasst: Do 25.07.02 02:27 
Lösche in deinem Projektverzeichnis mal alle Dateien mit der Endung *cfg und *dsk, danach müsste es wieder gehen.


Gruss
Burgpflanze

_________________
Gruss, Burgpflanze
scape Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 04.08.02 19:48 
Also ich hab die *CFGs gelöscht, *DSK gibts bei mir garnicht. Aber das hilft alles nix.... da muss ein RIESEN Compilerfehler hinterstecken, der mir wochenlange Arbeit zunichte macht.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 04.08.02 22:03 
Lass mich raten,

das dynamisch zu erzeugende Formular steht auf Visible = True.
Das würde nämlich deine Fehlermeldung erklären.

In der Zeile
ausblenden Quelltext
1:
formConEdit := TformConEdit.Create(self);					


erzeugst du somit ein Sichtbares nit Modales Fenster. Mit
ausblenden Quelltext
1:
formConEdit.ShowModal;					

versuchst du dann das ohnehin Sichtbare Fenster noch mal Sichtbar zu machen, das geht nicht.

scape hat folgendes geschrieben:
da muss ein RIESEN Compilerfehler hinterstecken, der mir wochenlange Arbeit zunichte macht.

Daran glaube ich nicht.

Gruß
Klabautermann
scape Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 04.08.02 22:09 
Falsch geraten, es steht auf Visible = False.

Du kannst mich gerne in Frankfurt besuchen kommen und Dich selber davon überzeugen. Ich programmiere auch nicht erst seit gestern :)[/b]
Maverick
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 04.08.02 23:17 
also ich hab das mit den MDI-Childs ausprobiert, nach dem ich alles auf MDI und wieder zurück gestellt habe, war Visible auf TRUE, vorher war es auf FALSE.
Bei true kommt deine SHOWMODAL-Fehlermeldung, bei false nicht, also entweder hast du bei der falschen Komponente das visible überprüft ( Visible=false muss die sein, die mit showmodal angezeigt werden soll), oder du setzt es im Quelltext irgendwo mal (Form.Show oder Visible:=true)
scape Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 04.08.02 23:39 
Also.. nochmal. Nein es ist nicht auf Visible. Ich setze es auch nirgends.
lilalaunebaer
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.09.02 14:46 
Halli Hallo !
Was für ne Diskussion.
Ich bin auch auf der Suche nach einer Lösung für dies Problem, das space zuerst beschrieben hat.

Die Fehlermeldung "Aus einem sichtbaren Fenster kann kein Modales gemacht werden" kommt beim Createn auch.

Aber ich WILL mit MDI-Formen arbeiten.
Ich brauche eine Lösung, auf einem Child ein Formular anzuzeigen, das Modal gezeigt wird, wenn auch nur Modal für die Konstellation Child<-->Form, das wäre egal.

Habe von der Hierarchie her gesehen folgendes :

MDIParentMain : MDIParent-Form mit MainMenü usw..
------> MDIC_SDaten : MDIChild als Unterpunktform
------------> SDaten_Neu : Form auf MDIChild, die Modal gezeigt werden soll, meinentwegen nur Modal für das Child, ist egal.

Ist nur zum erstellen eines neuen Datensatzes (allgemein gesagt),
der in der Child-Form bearbeitet werden kann. Damit man eben nicht in MDIC_SDaten rumpfuschen kann, während man einen neuen Eintrag in SDaten_Neu definiert.

Auch wenn ich die SDaten_Neu - Form auf fsNormal und Visible auf False setze und folgendes tue

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure TMDIRaumverteilung.btnNeuClick(Sender: TObject);
begin
   BelNeu := TBelNeu.Create(self);
   BelNeu.Parent := self;
   BelNeu.ShowModal;
end;


gehts zwar ohne Fehlermeldung, aber ich kann GAR NICHTS mehr anklicken, weil irgendwie alles modal angezeigt wird aber nichts mehr aktiv ist.

So. Ich hoffe da draßen gibts jemanden, der eine Möglichkeit parat hat !!