Toon posts:

[Delphi 6] Pagecontrol, TabSheets en Create

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik liep gisteravond/nacht tegen een probleempje op en hoopte dat het met een nachtje slapen zich misschien wel zou oplossen, niet dus :P.

Het zit namelijk zo: ik wil graag een TPageControl, dmv een knop TTabSheet's laten toevoegen. Dit gedeelte lukt wel, maar ik wil ook dat als de TabSheet is aangemaakt er een ander object kan worden gestopt. Bijvoorbeeld een Label.

Nou heb ik zelf het volgende uit gevogeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.createPage();
begin
        with TTabSheet.Create(PageControl1) do
        begin
                PageControl := PageControl1;
                Name := 'TabSheet' + inttostr(pageN);
                Caption := 'Page' + inttostr(pageN);
                
                with TLabel.Create(PageControl) do
                begin
                        Name := 'Label' + inttostr(pageN);
                        Caption := 'blaat';
                        Align := alClient;
                end;
        end;
        pageN := pageN + 1;
end;

pageN is een Integer die het aantal pagina's bijhoud
Ik krijg helemaal geen errors, dus das al iets, alleen wat ik ook instel (Align, SetBounds, Visible) nergens is de Label zichtbaar.

Weet iemand dit dan wel moet?

Verwijderd

Je moet de parent property zetten en de goede owner meegeven aan de constructor:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Button1Click(Sender: TObject);
var t : TTabSheet;
begin

        t := TTabSheet.Create(PageControl1);
        with t do
        begin
                PageControl := PageControl1;
                Name := 'TabSheet' + IntToStr(Random(100));;
                Caption := 'Page' + IntToStr(Random(100));

                with TLabel.Create(t) do
                begin
                        Name := 'Label'  + IntToStr(Random(100));
                        Caption := 'blaat';
                        Align := alClient;
                        Parent := t;
                end;
        end;

end;

Verwijderd

Topicstarter
TNX!,
nog even een vraagje: ik zag dat je pageN had vervangen door Random(100).
Is daar nog een bepaalde reden voor? Of had je hem gewoon getest en was dit makelijker:D?

Verwijderd

Ja, ik moest het even testen, ik wist het ook niet helemaal zeker :)

  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

kijk trouwens voor een beter component ff naar de Jedi VCL (www.delphi-jedi.org)

Cogito Ergo Credo


Verwijderd

Topicstarter
@Joriswit:Ja inderdaad, Als je teveel tabsheets maakt crasht ie :D (alweer om gezet naar pageN ;))

Trouwens kan het zo zijn dat hij van sommige objecten zegt "only read" als je hun Name-property probeert te setten. Want ik probeerde dat met een
TWebBrowser en daar lukt dat niet (bij een TEdit wel).
Wat is dan de manier om het aan te pakken?
Want dit werkt niet dus:
code:
1
2
3
4
5
6
with TWebBrowser.Create(t) do
                begin
                        Name := 'WS'  + IntToStr(Random(100));//error "only read"             
                        Align := alClient;
                        Parent := t; //error "only read"
                end;


@Jopiek: will do, alleen ik ben nog niet zo die hard Delphi hoor :D

[ Voor 5% gewijzigd door Verwijderd op 10-09-2003 19:14 . Reden: ff nog de errors er bij gezet ]


Verwijderd

Ik weet niet of dit de "nette" manier is, maar dit doet al iets meer:
code:
1
2
3
4
5
                with TWebBrowser.Create(t) do
                begin
                        Align := alClient;
                        ParentWindow := t.Handle;
                end;

Volgens mij mag je die Name ook wel laten zitten, dat is toch meer iets voor Design-time.

edit:
IE - addon aan het maken? (met tabbed browsing)

[ Voor 13% gewijzigd door Verwijderd op 10-09-2003 19:24 ]


Verwijderd

Topicstarter
@JorisWit: Niet zo zeer een addon, maar meer een oefening-etje voor mij zelf (mijn stage begint pas de 22e) Dus het leek mij handig om weer een beetje te programmeren met delphi (ff ophalen), want het leukste dat ik er mee heb gemaakt tot nu toe was een "lyric generator" :D.

Mmm hoe wazig, ook al staat de Align op alClient, hij vult maar ongeveer 1/4e van de tabsheet. Hoi weer werk erbij :D

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 07:56

alienfruit

the alien you never expected

Ik heb eens een component gemaakt die zowel IE of Gecko control aanmaakte afhankelijk wat de voorkeur was, alleen om een wazige reden werkt dit niet meer :(

Verwijderd

Topicstarter
Misschien iets met Align te maken?
Met welke versie werk jij dan?

Verwijderd

Ja bij mij werkt die align ook niet, beetje vaag. Ik gebruik Delphi 5

Verwijderd

Topicstarter
Ja inderdaad, ik dus 6, maar ik kan ook nergens iets vinden er over behalve dit:
Align TAlign Does not appear to be used.
bron: http://www.cryer.co.uk/br...webbrowser_properties.htm
wat hij hier mee bedoelt is mij niet totaal duidelijk.
(This is highly irritating).
Wazige is dat properties/methods als Height, Width en FullScreen ook niet werken.... (Navigate wel)


edit: Als ik handmatig een new Page toevoeg en dan ook een WebBrowser object toevoeg (align := none) en dan in FormOnCreate de align op AlClient zet doet hij het wel goed.
Dus het moet iets in de code zijn (of een wazige bug, waarschijnelijk niet)
Weet iemand iets?

[ Voor 26% gewijzigd door Verwijderd op 10-09-2003 20:11 ]


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 07:56

alienfruit

the alien you never expected

waar mik je die Twebbrowser niet in een panel
override Resize method en klaar is kees :)

Verwijderd

Topicstarter
Hoho moet ik me eigen gaan quoten: ik ben niet zo ver in Delphi, ehm hoe override je een method dan?

Verwijderd

alienfruit schreef op 10 september 2003 @ 21:42:
waar mik je die Twebbrowser niet in een panel
override Resize method en klaar is kees :)
Maar de vraag is dan: Wat zet je dan in die Resize als het component niet op z'n Height en Width properties reageerd?

Ook opvallend:
in tegenstelling tot alle andere Delphi componenten krijgt een TWebBrowser niet de goede grootte als je hem met drag en drop op het form "tekent"

Verwijderd

Topicstarter
TWebBrowser = 'Poep', kan zijn :D

Maar goed ik probeerde net te kijken wat de height was als ik hem op height := 500 zette.
Nou 500, alleen het scherm bleef even hoog :(

  • Just_a_Gamer
  • Registratie: November 2001
  • Nu online
Is je pagecontrol ook align := alclient?

[ Voor 7% gewijzigd door Just_a_Gamer op 10-09-2003 23:04 ]


Verwijderd

Topicstarter
Jep en de TabSheet ook :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Verwijderd schreef op 10 September 2003 @ 21:48:
Hoho moet ik me eigen gaan quoten: ik ben niet zo ver in Delphi, ehm hoe override je een method dan?
Zoeken in de help op het keyword override. :/

code:
1
procedure MyMethod(); virtual;


code:
1
procedure MyMethod(); override;

https://fgheysels.github.io/


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:12

Tomatoman

Fulltime prutser

Dat gedoe om een naam aan de tab sheet toe te kennen is nergens voor nodig. Je kunt de Name property gewoon leeglaten en alles werkt naar behoren. Dat geldt niet alleen voor TTabSheet, maar voor iedere TComponent of descendent daarvan. Het heeft at runtime ook totaal geen zin om een naam toe te kennen. Bewaar gewoon een referentie naar je component (simpelweg opslaan in een variabele) en je zult nooit meer de naam van een at runtime gecreërde component nodig hebben. Als je die toch nodig hebt, zit je code onnodig omslachtig in elkaar en kun je die ongetwijfeld zodanig herschrijven dat je de naam van de component niet nodig hebt.

Een goede grap mag vrienden kosten.


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

tomatoman schreef op 11 september 2003 @ 00:22:
Dat gedoe om een naam aan de tab sheet toe te kennen is nergens voor nodig. Je kunt de Name property gewoon leeglaten en alles werkt naar behoren. Dat geldt niet alleen voor TTabSheet, maar voor iedere TComponent of descendent daarvan. Het heeft at runtime ook totaal geen zin om een naam toe te kennen. Bewaar gewoon een referentie naar je component (simpelweg opslaan in een variabele) en je zult nooit meer de naam van een at runtime gecreërde component nodig hebben. Als je die toch nodig hebt, zit je code onnodig omslachtig in elkaar en kun je die ongetwijfeld zodanig herschrijven dat je de naam van de component niet nodig hebt.
en hoe dacht je 'm te kunnen destructen? je moet iig iets van een array of components hebben als variabele in zo'n geval... is idd zo dat naam niet heel erg nodig is, maar wel eens makkelijk ook als je het dynamisch maakt...

anders kun je iig niet efficient van FindComponent gebruik maken en is best wel handig zo af en toe...

Cogito Ergo Credo


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

FindComponent is nutteloos en langzaam, sla gewoon zoals tomatoman zegt de pointer op.

En je mag NOOIT VAN Z'N LEVEN EEN ANDER TCONTROL DERIVANT DAN TFORM DELETEN!!!! DAT WORDT VIA DE OWNER AUTOMATISCH GEDAAN!!!!!

did I make that clear?

Professionele website nodig?


Verwijderd

Topicstarter
Alles goed en wel, maar is er niemand die dus weet waarom hij de align property (en heigth, width) niet wilt pakken?
Pagina: 1