BdLm
asked on
form visible already true ???
I understand the error msg but can't not imagine how this should happen inside my code ...
I do:
form := Tform.Create(self)
form.showmodal;
if (form.modalresult=mrOK= then
begin
end
form has formstyle = fsnormal .....
form is not created inside the *.dpr file, alraedy removed here
modal-error.jpg
I do:
form := Tform.Create(self)
form.showmodal;
if (form.modalresult=mrOK= then
begin
end
form has formstyle = fsnormal .....
form is not created inside the *.dpr file, alraedy removed here
modal-error.jpg
Can you translate to English please.
ASKER
errror msg: ".... from a visible window you can not change to a modal window "
it's possible events inside the form to show modal cause it to become visible
before the call to showmodal is called
best solution:
find the code which sets the form onscreen
(like application.processmessage s)
workaround:
hide the form before showmodal
form := Tform.Create(self)
try
form.Hide;
form.showmodal;
if form.modalresult = mrOK then
begin
end
finally
form.Free;
end;
before the call to showmodal is called
best solution:
find the code which sets the form onscreen
(like application.processmessage
workaround:
hide the form before showmodal
form := Tform.Create(self)
try
form.Hide;
form.showmodal;
if form.modalresult = mrOK then
begin
end
finally
form.Free;
end;
What is your code? I can successfully use this code:
procedure TForm1.Button1Click(Sender: TObject);
var
form : Tform;
begin
form := Tform.Create(self);
form.showmodal;
if (modalresult=mrOK) then
begin
end;
form.Free;
end;
ASKER
@jimxy : exactly my code ... used many times on other locations without a problem
@geerd : help to show the form butr still av at modual result
@geerd : help to show the form butr still av at modual result
set form visible property to false in design
and try again
and try again
show the code in formcreate, constructor create, formshow, aftercreate and anything you call from those 4 procs/events
ASKER
--- no more code --- i promise except ....
procedure TForm.FormCreate(Sender: TObject);
begin
// fDBList :=TDatabaseList.create; // more info seee https://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q__26825062.html
self.height := Default_Height;
self.Width := Default_Width;
scaled := true;
end;
and ... I work with a TObjectist... once finished my work with the list a Button on that from disappears .... never set the property visible to false (i can also promise)
procedure TForm.FormCreate(Sender: TObject);
begin
// fDBList :=TDatabaseList.create; // more info seee https://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q__26825062.html
self.height := Default_Height;
self.Width := Default_Width;
scaled := true;
end;
and ... I work with a TObjectist... once finished my work with the list a Button on that from disappears .... never set the property visible to false (i can also promise)
changing the width or height will cause an invalidate
which in turn causes your form to become visible :)
procedure TForm.FormCreate(Sender: TObject);
begin
self.height := Default_Height;
self.Width := Default_Width;
scaled := true;
visible := false;
end;
which in turn causes your form to become visible :)
procedure TForm.FormCreate(Sender: TObject);
begin
self.height := Default_Height;
self.Width := Default_Width;
scaled := true;
visible := false;
end;
or set the width and height in the constructor
try to use
(self as Tform).height := Default_Height;
(self as TForm).Width := Default_Width;
self is in this case of type TForm, that wouldn't make a difference
Where did you get procedure TForm.FormCreate(Sender: TObject);? Why just TForm?
something else in your code is causing the problem
i created a test sample and this doesn't have the problem:
i created a test sample and this doesn't have the problem:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Edit1: TEdit;
procedure BitBtn1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
uses Unit3;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if ShowForm3(Self) then
Edit1.Text := 'Ok'
else
Edit1.Text := 'oops';
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm3 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form3: TForm3;
function ShowForm3(AOwner: TComponent): boolean;
implementation
{$R *.dfm}
function ShowForm3(AOwner: TComponent): boolean;
var form: TForm3;
begin
Result := False;
form := TForm3.Create(AOwner);
try
if form.ShowModal = mrOk then
begin
Result := True;
end;
finally
form.Free;
end;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
Width := 200;
Height := 300;
Scaled := True;
end;
end.
ow ow ow ... you override the standard TForm ?
with your own class TForm ?
so you subclassed the TForm ?
and want to add your own customizing ?
with your own class TForm ?
so you subclassed the TForm ?
and want to add your own customizing ?
nope , still works with subclassing
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm = class(Forms.TForm)
public
constructor Create(AOwner: TComponent); override;
procedure FormCreate(Sender: TObject);
end;
type
TForm3 = class(TForm)
end;
var
Form3: TForm3;
function ShowForm3(AOwner: TComponent): boolean;
implementation
{$R *.dfm}
function ShowForm3(AOwner: TComponent): boolean;
var form: TForm3;
begin
Result := False;
form := TForm3.Create(AOwner);
try
if form.ShowModal = mrOk then
begin
Result := True;
end;
finally
form.Free;
end;
end;
{ TForm }
constructor TForm.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
OnCreate := FormCreate;
end;
procedure TForm.FormCreate(Sender: TObject);
begin
Width := 200;
Height := 300;
Scaled := True;
end;
end.
You can assign the ModalResult to a variable or just test it directly
var
form: Tform
form := Tform.Create(self);
try
if form.ShowModal = mrOk then
.........
or
var
FormResult: Integer;
form: Tform;
begin
form := Tform.Create(self);
try
FormResult := form.ShowModal;
..............
ASKER
OK: Geerd idea so far a bit improvement on other pc the same code with a different run time behaviour,
means only the missing button effect appears ......
the very bad thing : the complete code had been functional a few month ago .... but we did not track the changes with subversion of that unit :-(
means only the missing button effect appears ......
the very bad thing : the complete code had been functional a few month ago .... but we did not track the changes with subversion of that unit :-(
is this delphi 7 on a new pc showing the different behaviour ?
and you have also installed the patches for delphi 7 on the new pc ?
and you have also installed the patches for delphi 7 on the new pc ?
ASKER
no both PC (notebook) are almost identical , could not see any difference in the D7 behaviour - no idea where this bug comes from ....
it's easy to test a delphi... most common bug is oldcreateorder
this comes into play with a constructor and FormCreate
var Test: integer;
constructor TForm1.Create(AOwner: TComponent);
begin
Test := 1;
inherited Create(AOwner);
ShowMessage('Create ' + IntToStr(Test));
Test := Test +1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('FormCreate ' + IntToStr(Test));
Test := Test + 10;
end;
you should get Create 1, and then get FormCreate 2
with oldCreateOrder := False
otherwise the delphi version has the bug
at least that's what i found out some time ago with a unpatched delphi 7
this comes into play with a constructor and FormCreate
var Test: integer;
constructor TForm1.Create(AOwner: TComponent);
begin
Test := 1;
inherited Create(AOwner);
ShowMessage('Create ' + IntToStr(Test));
Test := Test +1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('FormCreate ' + IntToStr(Test));
Test := Test + 10;
end;
you should get Create 1, and then get FormCreate 2
with oldCreateOrder := False
otherwise the delphi version has the bug
at least that's what i found out some time ago with a unpatched delphi 7
oh yeah: the type declaration
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
end;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
end;
ASKER
add fastrMM4 and removed code from the project file now compile is failing with AV ??????
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
you forgot to blank out the other module name ... LayoutExtraction
Start the program with F8 in delphi.
Then in the menu search / Find error
enter 004AFF6A and see where it takes you ...
Start the program with F8 in delphi.
Then in the menu search / Find error
enter 004AFF6A and see where it takes you ...
you are now giving a completely different error
????????????????????????
and then deleting this question because you found the solution to that other error
thud ... my chin dropping on the floor in awe and staring wide eyed at my screen
????????????????????????
and then deleting this question because you found the solution to that other error
thud ... my chin dropping on the floor in awe and staring wide eyed at my screen
+++
___ooo__0_0__ooo___
ASKER
seems that a BDE failure has been the reason, therfore it does not make sense to me to abward the good discussion from yetserday, next time I spilt points again ...