Avatar billede friiiiis Novice
12. oktober 2012 - 09:26 Der er 3 kommentarer og
2 løsninger

onresize på form

Hej,

Jeg har flere forskellige komponenter på en form som ved program start maximerer. Det gør at jeg skal resize de forskellige komponenters størrelser for at det passer det formen. Men i hvilken af de forskellige komponenters onresize skal jeg resize?

Jeg har en TPageControl med en masse Tabsheets på. På de forskellige tabsheets er der en masse TCharts.

Jeg får meget forskellige resultater afhængigt af om jeg placere definition af height/width på formens onresize, på pagecontrole onresize eller tabsheet onresize men der er ikke rigtigt noget der ser rigtigt ud...

Hvad er den generelle logik bag onresize i Delphi?

Starter formen med at lave en resize og derefter TpageControl og derefter Tabsheet? eller hvad?
Avatar billede skovjuul Nybegynder
12. oktober 2012 - 11:57 #1
Måden jeg gerne kommer uden om den problem-stilling er måske ikke køn, men den virker for mig :)

Panels - og så kom dine komponenter på dem og vælge Align = AlClient.
På den måde burde tabsheets og lign. selv tilpasse sig når du ændre størrelsen på panelet, som du igen kan sætte til alClient hvis den skal tilpasse sig størrelsen på en resize af hovedformen. Eller hvis mange paneler skal ændre størrelse kan du på hovedformens Onresize lave noget i retningen af:

Sætter panel2 i midten:
Panel2.Left  := (panelMain.Width div 2) - (Panel2.Width div 2);
Panel2.Top    := (panelMain.Height div 2) - (Panel2.Height div 2);

Sætter overskriften i midten af Panel2
labelOverskrift.Left  := (Panel2.Width div 2) - (lavelOverskrift.Width div 2);

Så kan du bare lave tallene om til procent-baseret i stedet for, så kan de forskellige paneler få x% af pladsen på hovedformen.

Som sagt, nok ikke kønt, men det kunne virke :)
Avatar billede friiiiis Novice
12. oktober 2012 - 13:49 #2
ok... men det vil sige at jeg skal ligge

Panel2.Left  := (panelMain.Width div 2) - (Panel2.Width div 2);


i formens onresize og ikke i tabsheet resize eller i pagecontrol resize?
Avatar billede skovjuul Nybegynder
13. oktober 2012 - 19:09 #3
Ja, umiddelbart.
Komponenterne resizer sig selv hvis du har sat dem til alClient på et panel og panelerne resizer du på formens onresize.
Du kan sikkert gøre det direkte på komponenterne, jeg foretrækker bare at bruge paneler da de er nemmere at rykke rundt på :)
Avatar billede friiiiis Novice
16. oktober 2012 - 19:56 #4
Skovjuul: Smid et svar, du får de 50 point; håber det er OK...

Jeg fandt delvist selv ud af det... det viser sig at onresize ikke altid bliver kaldt automatisk - indimellem bliver den ikke kaldt - ved mig bliver den ikke kaldt ved lave skærmopløsninger (???????)

Jeg har derfor lavet en manuel onresize der bliver kaldt ved formen's onshow

Desuden har jeg fundet ud af man ikke skal bruge tabhseet's onresize men alene formens resize samt evt. panel onresize...

Jeg er ikke klar over hvorfor det er sådan men nu har jeg da fået det til at virke...
Avatar billede skovjuul Nybegynder
16. oktober 2012 - 20:52 #5
Lyder mærkeligt med de lave skærmopløsninger.

Men helt fint, ved godt min løsning ikke var den kønneste, men godt at du har kunne bikse noget sammen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester