Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Cannot make a visible Window modal (https://www.delphipraxis.net/157800-cannot-make-visible-window-modal.html)

SvenLittkowski 25. Jan 2011 16:18

Cannot make a visible Window modal
 
Hallo,

ich bekomme bei Aufruf von Form.ShowModal die folgende Fehlermeldung bei der Testausführung:

"Cannot make a visible Window modal". Woran liegt's?

Deep-Sea 25. Jan 2011 16:20

AW: Cannot make a visible Window modal
 
Weil das Fenster bereits sichtbar ist. Schließe es vorher :wink:

DeddyH 25. Jan 2011 16:42

AW: Cannot make a visible Window modal
 
Oder Visible auf false setzen

SvenLittkowski 25. Jan 2011 16:50

AW: Cannot make a visible Window modal
 
Ich hatte bereits die Eigenschaft Visible auf "False" zu stehen. Hatte es nochmal in OnCreate hineingesetzt (False), was aber zu Access Violation beim Testlauf führt.

michaelthuma 25. Jan 2011 18:25

AW: Cannot make a visible Window modal
 
Sven!

Do you create the form with

An sich sollte...
var
myForm : TForm1;
begin
Application.CreateForm(TForm1, myForm); --> Windows is invisible
myForm.ShowModal

Das Form sauber anzeigen ... wobei TForm ist deine Fensterklasse ist. Oder Erzeuge es einfach mit

myFrom:=TForm1.Create;
myFrom.ShowModal;

Wenn das nicht geht, dann melde dich einfach. Werden das schon noch finden.

Zitat:

Zitat von SvenLittkowski (Beitrag 1077264)
Ich hatte bereits die Eigenschaft Visible auf "False" zu stehen. Hatte es nochmal in OnCreate hineingesetzt (False), was aber zu Access Violation beim Testlauf führt.


SvenLittkowski 25. Jan 2011 20:29

AW: Cannot make a visible Window modal
 
Hier Auszüge meines Codes, wie er jetzt ist (und Fehler verursacht). "Beta" ist der Name des Windows, was geöffnet werden soll und nichht klappt.

Code:
procedure TAlpha.FormCreate(Sender: TObject);
begin
 ...
 Beta.Visible:=False;
 Randomize;
 SupportMe:=Random(1000);
end;

procedure TAlpha.TimerProgressTimer(Sender: TObject);
begin
 ...
 if Beta.Visible=False then
 begin
//  if SupportMe=1000 then Beta.ShowModal;
  Beta.ShowModal; // Zum Testen
 end;
end;
Code:
program AMC2;

uses
  Forms,
  Box1 in 'Box1.pas' {Alpha},
  Box2 in 'Box2.pas' {Beta};

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'FNR Ancient Measures Calculator v2.0';
  Application.CreateForm(TAlpha, Alpha);
  Application.CreateForm(TBeta, Beta); // Demo-Hinweis, Aufruf zu freiwilligem Support
  Application.Run;
end.

haentschman 25. Jan 2011 20:38

AW: Cannot make a visible Window modal
 
Zitat:

Zitat von SvenLittkowski (Beitrag 1077264)
... was aber zu Access Violation beim Testlauf führt.

wahrscheinlich wird der Timer schon sofort gestartet. Da kann es sein, daß Beta schon angezeigt werden soll obwohl noch gar nicht erzeugt wurde.
...das eigentliche Problem ist unerklärlich, da es überall und hundertfach so gemacht wird...
- Form erzeugen (automatisch oder zur Laufzeit) ... ist damit Visible = False
- Form mit ShowModal anzeigen.
:gruebel:

nimm das ShowModal mal aus dem Timer raus in einen ButtonClick (Testweise) und guck ob der Fehler auch da auftritt.

himitsu 25. Jan 2011 20:46

AW: Cannot make a visible Window modal
 
Zitat:

Zitat von SvenLittkowski (Beitrag 1077311)
Code:
procedure TAlpha.FormCreate(Sender: TObject);
begin
  ...
  Beta.Visible:=False;
  ...
end;


Application.CreateForm(TAlpha, Alpha);
Application.CreateForm(TBeta, Beta);

Beta wird nach Alpha erstellt, also existiert im OnCreate von Alpha das Beta noch nicht und es muß zwangsläufig knallen.

haentschman 25. Jan 2011 20:50

AW: Cannot make a visible Window modal
 
Das erklärt wie ich schon sagte, die Zugriffsverletzung aber nicht die Meldung "Cannot make a visible Window modal". Ich tippe mal eher darauf, daß die Meldung irreführend ist und die Ursache in der Reihenfolge Erzeugung und Anzeige liegt.

SvenLittkowski 25. Jan 2011 21:38

AW: Cannot make a visible Window modal
 
Ja, das Problem ist nun gelöst. in der Tat war die Ursache die, daß ich den Form-Aufruf in einen Timer hineinverlegt hatte. Nun wird die Form beim Ereignis "OnChange" eines Textfeldes aufgerufen. Alle Fehler sind hiermit behoben, und ich will jedem von Euch für Eure gute Hilfe danken.

Vier weitere Fragen fallen mir aber noch ein:
- Wie kann ich den Text von ListBox.Hint den Eintrag (Item) anzeigen lassen,, über welchem sich die Mouse gerade befindet?
- Wie kann ich den Benutzer meines Programmes mir eine formatierte E-Mail mit den Inhalten zweier Textfelder zusenden lassen? *
- Wie kann ich das Verzeichnis vom Programm ermitteln lassen, um dort eine INI-Datei (Speichern von Koordinaten) zu erstellen?
- Oder, wie kann ich Daten in der Registry speichern und lesen?

* = Mein Programm rechnet antike Maße in heutige um. Bei Korrekturen oder Vorschlägen soll der Benutzer mir das antike Maß mit dem equivalenten Wert eines heutigen Maßes zusenden können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 Uhr.
Seite 1 von 2  1 2      

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