Forum Delphi.cz

Delphi => Obecné => Téma založeno: Stanislav Hruška 09-09-2019, 15:28:25

Název: Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: Stanislav Hruška 09-09-2019, 15:28:25
Viem, že to tu je o Delphi a nie TMS. Ale na ich stránke sa ťažko dohovorím. Prosím o porozumenie.
Ak som si komponent odvodil z T(DB)AdvSmoothDatePicker, tak som nebol schopný zaistiť správne vykresľovanie. Nedá sa to.
Tak som si za základ zobral AdvPanel. Tu som všetko zvládol, až na jeden kozmetický problém. Kalendár sa mi zobrazuje v základných farbách a nie podľa témy/štýlu.
Problém je v tom,že to majú automatizované a o T(DB)AdvSmoothDatePicker sa postará TAdvAppStyler. T(DB)AdvSmoothDatePicker nemá vlastnosť Styler.
.
Netuším ako to mám riešiť. Ďakujem za prípadné rady.
Název: Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: Stanislav Hruška 09-09-2019, 20:33:03
Nakoniec som to všetko vyriešil. Išlo to jednoducho. Len ten čas kým mi napadlo správne riešenie.
Nechal som pôvodné riešenie založené na T(DB)AdvSmoothDatePicker. Ale doplnil som
Kód: Delphi [Vybrat]
  1.  procedure TjstDBDatePickerTry.DateTimePickerClickBtn(Sender: TObject);
  2.  
  3. begin
  4.   inherited;
  5.   FPanel.Visible := False;
  6. end;
  7. .
  8.  
  9. procedure TjstDBDatePickerTry.DateTimePickerChange(Sender: TObject);
  10. begin
  11.   inherited;
  12.   FPanel.Visible := True;
  13. end;
Takto to po zmene dátumu funguje. To znamená, že nie je problém s vykreslením a nastavením vzhľadu.
Musím ešte nájsť niečo, čo to obnoví ak nič nevyberiem.
Název: Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: miroB 09-09-2019, 21:22:10
..
Takto to po zmene dátumu funguje. To znamená, že nie je problém s vykreslením a nastavením vzhľadu.
Musím ešte nájsť niečo, čo to obnoví ak nič nevyberiem.
Nie je to "niečo" v princípe podobné ako bolo riešené v odkaze dolu? Išlo o Popupmenu, kde bolo treba odchytiť prípad, keď užívateľ nevybral nič (napríklad stlačením klávesy Esc, alebo kliknutím mimo rozbalené menu)
https://forum.delphi.cz/index.php/topic,16584.msg103884.html#msg103884 (https://forum.delphi.cz/index.php/topic,16584.msg103884.html#msg103884)
Název: Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: Stanislav Hruška 09-09-2019, 21:44:39
Už som písal ďalší príspevok, ale medzitým si tu zareagoval. Ja si myslím, že to bude niečo podobné, ale...nechytám sa.
.
Pokračujem mojim pôvodným príspevkom
Hm, nedarí sa mi nájsť nič vhodné. Kalendár zmizne až pri kliknutí mimo neho. A to neviem obslúžiť. Žiaľ samotný kalendár nemá žiadnu metódu. Všetky metódy sa vzťahujú len na samotný "ComboBox".
Predpokladám použitie Windows message, ale to je nad moje sily.
Teraz som vymyslel takú barličku, ale nie je to ono
Kód: Delphi [Vybrat]
  1.  procedure TjstDBDatePickerTry.DateTimePickerEnter(Sender: TObject);
  2. begin
  3.   FPanel.Visible := True;
  4. end;
Prvý obrázok ukazuje ako to vyzerá po zavretí kalendára. V skutočnosti je jeho obsah nedostupný. Po kliknutí naň sa dostane do normálneho stavu - druhý obrázok. Tak by to malo vyzerať po každom zavretí kalendára.
Tie Edit sú na FPanel-y.
.
Poznámka: TMS uverejnil novú verziu. Úplne prepracovanú. Určite si treba prečítať migrate.txt. Týka sa to aj balíčkov založených na TMS komponentov.
Název: Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: Stanislav Hruška 09-09-2019, 22:10:11
Kalendár má použiteľné tak akurát destructor Destroy; override; To neviem využiť. Pritom netuším, či by mi to pomohlo.
Název: Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: Lukáš Vlček 11-09-2019, 08:20:52
Už som písal ďalší príspevok, ale medzitým si tu zareagoval. Ja si myslím, že to bude niečo podobné, ale...nechytám sa.
.
Pokračujem mojim pôvodným príspevkom
Hm, nedarí sa mi nájsť nič vhodné. Kalendár zmizne až pri kliknutí mimo neho. A to neviem obslúžiť. Žiaľ samotný kalendár nemá žiadnu metódu. Všetky metódy sa vzťahujú len na samotný "ComboBox".
Predpokladám použitie Windows message, ale to je nad moje sily.
Teraz som vymyslel takú barličku, ale nie je to ono
Kód: Delphi [Vybrat]
  1.  procedure TjstDBDatePickerTry.DateTimePickerEnter(Sender: TObject);
  2. begin
  3.   FPanel.Visible := True;
  4. end;
Prvý obrázok ukazuje ako to vyzerá po zavretí kalendára. V skutočnosti je jeho obsah nedostupný. Po kliknutí naň sa dostane do normálneho stavu - druhý obrázok. Tak by to malo vyzerať po každom zavretí kalendára.
Tie Edit sú na FPanel-y.
.
Poznámka: TMS uverejnil novú verziu. Úplne prepracovanú. Určite si treba prečítať migrate.txt. Týka sa to aj balíčkov založených na TMS komponentov.

Komponenta kalendáře má událost OnCloseUp(Sender: TObject) , není to to co právě hledáš ? :)
Název: Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: Stanislav Hruška 11-09-2019, 09:20:11
Kalendár nemá žiadnu zverejnenú virtual/override metódu.
Existuje pre samotný Picker CloseDropDown, ale tam mi to nefunguje.
CloseUp sa nepodarilo nikde nájsť.
Napísal som na TMS. Zareagovali a vypýtali si ďalšie info. Poslal som im celý zdroják. Uvidíme.
EditYear som musel položiť priamo na základný panel, lebo na vlastnom sa vykresľoval zle.
Název: Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
Přispěvatel: Lukáš Vlček 11-09-2019, 11:26:00
Kalendár nemá žiadnu zverejnenú virtual/override metódu.
Existuje pre samotný Picker CloseDropDown, ale tam mi to nefunguje.
CloseUp sa nepodarilo nikde nájsť.
Napísal som na TMS. Zareagovali a vypýtali si ďalšie info. Poslal som im celý zdroják. Uvidíme.
EditYear som musel položiť priamo na základný panel, lebo na vlastnom sa vykresľoval zle.

jéja, jsem to zle přečetl. Já koukal po TAdvDatePicker - Ten tam tu událost má :) Zkus si je porovnat a uvidíš který se ti bude hodit lépe :)