Práce s vytvořenou komponentou – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Práce s vytvořenou komponentou – Delphi – Fórum – Programujte.comPráce s vytvořenou komponentou – Delphi – Fórum – Programujte.com

 

Radkus
~ Anonymní uživatel
9 příspěvků
21. 2. 2019   #1
-
0
-

Zdravím, rád bych se zeptal jak můžu dále pracovat s komponentou, kterou jsem programově vytvořil pomocí Create. Konkrétně se jedná o PairSplitter, ale samozřejmě nejen s ní.

Vytvoření: 

VAR Spliter: TPairSplitter;
...

Spliter:= TPairSplitter.Create(Self);
with Spilter do
  begin
    Parent:= PageControl1.Page[0];
    Name:= 'PairSplitter'+(IntToStr(CisloSplitter));
    Sides[0].Name:= 'PairSplitterSide'+ (IntToStr(CisloSide));
    Sides[1].Name:= 'PairSplitterSide'+ (IntToStr(CisloSide)+1);
end;
...

No a chtěl bych s touto komponentou pracovat dále. Např. změna velikosti Width a zde už mám problém. 

VAR SpilterSide: TPairSplitterSide;
...

IF FindComponent('PairSplitterSide'+ (IntToStr(CisloSide)) <> NIL THEN
   begin
     SpilterSide:= FindComponent('PairSplitterSide'+ (IntToStr(CisloSide));
       with SpilterSide do
            SpilterSide.Width:= 100;
      end;
   end;

...

Toto mi vyhodí chybu: Incompatible types: got "TComponent" expected "TPairSplitterSide".

Tak jsem zkusil jiný způsob: 

...

IF FindComponent('PairSplitterSide'+ (IntToStr(CisloSide))) <> NIL THEN
   begin       
     with FindComponent('PairSplitterSide'+ (IntToStr(CisloSide))) do
          Width:= 100;
    end;

...

Tohle mi však změní velikost celého okna, tedy Form a ne PairSplitterSide.

Bohužel zde již mé amatérské pokusy s programováním narazily na své limity, tak pokud by mi někdo odkázal poradit budu rád :).

Nahlásit jako SPAM
IP: 194.213.198.–
gna
~ Anonymní uživatel
1849 příspěvků
21. 2. 2019   #2
-
0
-

Můžeš tu vrácenou hodnotu přetypovat.

SplitterSide := FindComponent(...) as TPairSplitterSide;

Ale Sides máš přece v tom Splitteru, FindComponent k ničemu nepotřebuješ.

Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
21. 2. 2019   #3
-
0
-

#1 Radkus

componentu ti to najde, takže pro práci s ní jí stačí přetypovat

VAR SpilterSide: TComponent; 
...

IF FindComponent('PairSplitterSide'+ (IntToStr(CisloSide)) <> NIL THEN
   begin
     SpilterSide:= FindComponent('PairSplitterSide'+ (IntToStr(CisloSide));
     with TPairSplitterSide(SpilterSide) do
            Width:= 100;
      end;
   end;

v tomto případě by možná ani to přetypování nebylo nutné

jinak pro nastavení méně než 3 proměnných u jednoho objektu je with celkem zbytečný a někdy kontraproduktivní

pro podrobnější analýzu pokud by to nešlo by to chtělo alespoň ty definice tříd TPairSideSplitter a TPairSplitter

Nahlásit jako SPAM
IP: 91.139.9.–
MilanL+1
Grafoman
21. 2. 2019   #4
-
0
-

#3 MilanL
ještě bych to změnil netřeba prohledávat 2x

nejdříve bych dal SpilterSide := find component... a až za to If spilterside <>nil

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý