Autor Téma: Vlastný komponent s T(DB)AdvSmoothDatePicker  (Přečteno 8298 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4505
  • Karma: 40
    • Verze Delphi: XE7 professional
Vlastný komponent s T(DB)AdvSmoothDatePicker
« kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4505
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
« Odpověď #1 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 520
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
« Odpověď #2 kdy: 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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4505
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
« Odpověď #3 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4505
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
« Odpověď #4 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Lukáš Vlček

  • Plnoletý
  • ***
  • Příspěvků: 144
  • Karma: 2
  • Strength Through Unity, Unity Through Faith.
    • Verze Delphi: Rad Studio XE8
    • Bludspeed s.r.o.
Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
« Odpověď #5 kdy: 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áš ? :)
Strength Through Unity, Unity Through Faith.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4505
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
« Odpověď #6 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Lukáš Vlček

  • Plnoletý
  • ***
  • Příspěvků: 144
  • Karma: 2
  • Strength Through Unity, Unity Through Faith.
    • Verze Delphi: Rad Studio XE8
    • Bludspeed s.r.o.
Re:Vlastný komponent s T(DB)AdvSmoothDatePicker
« Odpověď #7 kdy: 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 :)
Strength Through Unity, Unity Through Faith.