boardtc
asked on
Setting Form1.BorderIcons in code
I prefer to set properties in code rather than via the object inpsector as I find it more maintainable that way.
I want to set
Form1.BorderIcons := [];
Form1.Position := poMainFormCenter;
in code. It gived a visiblity erro if I try and set them in my Form1.FormCreate, If I try in Form1.FormShow the assigments are not effective whereas they are if Is et them in the object inspector. How can I achieve this in code?
Thanks, Tom.
I want to set
Form1.BorderIcons := [];
Form1.Position := poMainFormCenter;
in code. It gived a visiblity erro if I try and set them in my Form1.FormCreate, If I try in Form1.FormShow the assigments are not effective whereas they are if Is et them in the object inspector. How can I achieve this in code?
Thanks, Tom.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
works like a charme
procedure TForm1.FormCreate(Sender: TObject);
begin
BorderIcons := []; //just left out Form1
Position := poMainFormCenter;
combobox1.Style := csDropDownList;
end;
?? didn't understand the question -> problem
meikl ;-)
procedure TForm1.FormCreate(Sender: TObject);
begin
BorderIcons := []; //just left out Form1
Position := poMainFormCenter;
combobox1.Style := csDropDownList;
end;
?? didn't understand the question -> problem
meikl ;-)
ASKER
So they all show for you? What if you do a combobox1.items.commatext := 'one,two,three'; Does that show too?
I wonder why they don't show for me unless thay are in the object inpector. From j42's comment above he would appear to know what I am talking about and has experienced the problem.
Confused now.
Cheers, Tom.
I wonder why they don't show for me unless thay are in the object inpector. From j42's comment above he would appear to know what I am talking about and has experienced the problem.
Confused now.
Cheers, Tom.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
> From j42's comment above he would appear to know what I am talking about and has experienced the problem.
Yep, I had similar problems but I can't remember exactly. The only thing I know is that sometimes the OnCreate event is
'too late', thus the hiding of the original constructor. And I can remember other members of EE asking qusetions about
the same topic.
I played a little with the BorderIcons property and it seams that you can use it in the OnCreate event. I don't know what's
wrong with your code. I tried SDI and MDI apps, Application.CreateForm and Form1 := TForm1.Create(Nil). Everything worked
ok...
Just another guess. Try to replace all the instances (Form1, Form2) by the Self keyword. If it works I will explain why. Sorry,
don't know what else to do.
Yep, I had similar problems but I can't remember exactly. The only thing I know is that sometimes the OnCreate event is
'too late', thus the hiding of the original constructor. And I can remember other members of EE asking qusetions about
the same topic.
I played a little with the BorderIcons property and it seams that you can use it in the OnCreate event. I don't know what's
wrong with your code. I tried SDI and MDI apps, Application.CreateForm and Form1 := TForm1.Create(Nil). Everything worked
ok...
Just another guess. Try to replace all the instances (Form1, Form2) by the Self keyword. If it works I will explain why. Sorry,
don't know what else to do.
ASKER
thanks for the info. Not sure what you mean by "Try to replace all the instances (Form1, Form2) by the Self keyword". I create all froms on the fly, normally they are embeded in other forms so the create goes like
TheForm := Self.Create(ParentPanel.Ow ner);
with TheForm reference being local only to a procedure and killed at the end.
Thanks for the testing. I'll have to figure out why mine does not get called.
Cheers, Tom.
TheForm := Self.Create(ParentPanel.Ow
with TheForm reference being local only to a procedure and killed at the end.
Thanks for the testing. I'll have to figure out why mine does not get called.
Cheers, Tom.
Ok, maybe you are aware of all that stuff. If so, please kindly skip this comment ;-)
let's say you have a class TYourForm and a global variable YourForm in YourFormUnit.pas.
In your *.dpr file there is something like Appliaction.CreateForm(TYo urForm, YourForm). In
your procedure you have a local variable theForm: TYourForm and you call
theForm := TYourForm.Create(ParentPan el.Owner). Your OnCreate handler looks something
like this:
procedure TYourForm.CreateForm(Sende r...);
begin
YourForm.BorderIcons := [];
end;
=> Error.
YourForm is not a dangling reference since the CreateForm in the *.dpr file but you don't
want to change any property of YourForm but of theForm (the local one).
procedure TYourForm.CreateForm(Sende r...);
begin
theForm.BorderIcons := [];
end;
will work but it's bad style.
procedure TYourForm.CreateForm(Sende r...);
begin
Self.BorderIcons := [];
end;
is what I prefer.
Hope this was clear enough.
let's say you have a class TYourForm and a global variable YourForm in YourFormUnit.pas.
In your *.dpr file there is something like Appliaction.CreateForm(TYo
your procedure you have a local variable theForm: TYourForm and you call
theForm := TYourForm.Create(ParentPan
like this:
procedure TYourForm.CreateForm(Sende
begin
YourForm.BorderIcons := [];
end;
=> Error.
YourForm is not a dangling reference since the CreateForm in the *.dpr file but you don't
want to change any property of YourForm but of theForm (the local one).
procedure TYourForm.CreateForm(Sende
begin
theForm.BorderIcons := [];
end;
will work but it's bad style.
procedure TYourForm.CreateForm(Sende
begin
Self.BorderIcons := [];
end;
is what I prefer.
Hope this was clear enough.
ASKER
This wasn't working and then started working again...one of those weird delphi problems. I am trying to think of an example of why you would reinstroduce the form create.
chees, tom.
chees, tom.
ASKER
I did not have much luck with your method. I create all my forms ont he fly so did not have to change any CreateForms. I removed the FomrCreate event and tried adding :
constructor Create; reintroduce;
..
constructor TMyForm1.Create;
begin
inherited Create(Nil); // Nil: no owner
MyCombo.Style := csDropDownList;
end;
This does not work. I have to set the style in the object inspector for the items dropdown to show.
Thanks, Tom.