Autor Téma: Moje MCVE - pripomienky a návrhy  (Přečteno 664 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Moje MCVE - pripomienky a návrhy
« kdy: 19-05-2019, 09:11:35 »
Viď https://forum.delphi.cz/index.php/topic,16665.0.html príspevok #20
Citace
No (co se tyce toho puvodniho MCVE kodu z jineho dotazu), zacal bych tim jak si z tech TMS komponent vyrobit (tak trochu) "DB aware" komponenty nez mastit neco tak neprehledneho a komplikovaneho (delajiciho ve vysledku vice nez ma).
Vytvoriť "DB awareP bol jediný dôvod pre napísanie tohto riešenia. To už mi bolo vytknuté. Som si toho stavu vedomý. Ja som to vtedy ináč nevedel a na tom sa zatiaľ nič nezmenilo :'(  Dokonca som rád/hrdý, že sa mi vôbec niečo podarilo dať dokopy.
Aj preto som tam napísal, že beriem akékoľvek pripomienky.
PS:
To Delfin - ja som dúfal, veril a túžobne očakával, že urobíš kostru MCV (Model - riadenie - pohľad) z ktorej budem vychádzať. Aj si začal, ale potom som už nedostal žiadnu informáciu. Pozor! Nič nevyčítam. Veď si nič nesľúbil, čo bolo aj z oboch strán zdôraznené. Pracoval si aj na tom, aby si pri VST obišiel record.
Na internete som našiel len teóriu, ale podľa nej to nespravím. Keby bol nejaký príklad, tak snáď.
« Poslední změna: 19-05-2019, 09:24:07 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #1 kdy: 19-05-2019, 09:28:00 »
Ešte dodatok.
Mám dva projekty. Uvedené MCV (PoBeS) a správu bytov. Pri PoBeS by som to asi nechal tak ako to je. Nie je to veľký projekt. Tá správa bytov je už iná káva a tam by som to teda prerobil.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1812
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #2 kdy: 19-05-2019, 18:57:09 »
Jenze jsi skoncil de-facto s vlastni implementaci DB aware komponent (pripadne chovani LiveBindings). Jen tezkopadnou, bez vyuziti datalinku. Co mas ted je separatni objekt v nemz strezis odkaz na vizualni objekt a odkaz na typ DB pole spolu s jeho nazvem. Zjednodusene:

Kód: Delphi [Vybrat]
  1. type
  2.   TDBEditCtrl = class(TObject)
  3.   strict private
  4.     FEditWinCtrl: TWinControl;
  5.     FFieldType: TFieldType;
  6.     FNameField: string;
  7.   public
  8.     property EditWinCtrl: TWinControl read FEditWinCtrl write FEditWinCtrl;
  9.     property FieldType: TFieldType read FFieldType write FFieldType default ftString;
  10.     property NameField: string read FNameField write FNameField;
  11.   end;

A objekt ktery obsahuje kolekci TDBEditCtrl, instanci TFDTable a predava data z a do vizualnich komponent a obsluhuje cteni, vkladani, editaci a mazani zaznamu v objektu tabulky. Zjednodusene napr.:

Kód: Delphi [Vybrat]
  1. type
  2.   TCustomDB = class
  3.   strict private
  4.     procedure ReadAdvOfficeCheckBox;
  5.     procedure ReadCheckBox;
  6.     procedure ReadtcCheckBox;
  7.     procedure ReadtcComboBox;
  8.     procedure WriteAdvComboBox;
  9.     procedure WritetcCheckBox;
  10.     procedure WritetcCheckBoxBoolean;
  11.     procedure WritetcCheckBoxInteger;
  12.     procedure WritetcComboBox;
  13.   strict protected
  14.     FTable: TFDTable;
  15.     FDBEditCtrls: TObjectList<TDBEditCtrl>;
  16.   public
  17.     procedure DeleteRec(const AAutoCommit: Boolean); virtual;
  18.     procedure EditRec; virtual;
  19.     procedure InsertRec; virtual;
  20.   end;

To vse uz ovsem umi DB aware komponenty a dataset (pripadne LiveBindings) skrze datalink. Tim nechci rict ze se DB aware komponent nebo LiveBindings zastavam; naopak, nemam je rad a nikdy jsem je pro novy projekt nepouzil. Vydal bych se cestou implementace datalinku.
« Poslední změna: 19-05-2019, 19:12:41 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #3 kdy: 19-05-2019, 20:05:36 »
S DB aware komponentami som veľmi rýchlo narazil na problémy, ktoré by som riešil ťažko. Ak vôbec. Túto moju skúsenosť potvrdilo niekoľko ľudí. Takže ich nechcem. Mojim riešením som ich obišiel a naplno využívam vlastnosti klasických komponentov (TMS), ktorých je podstatne viac a fungujú bez chýb.
Citace
Vydal bych se cestou implementace datalinku.
Konečne niečo konkrétne :)  Idem sa pozrieť o čo vlastne ide.
.
Moje InsertRecord a EditRecord vôbec nepracujú s DB. Len nastavia príznak. V Post, po vykonaní kontroly údajov, na základe toho príznaku volám Table.Insert alebo Table.Edit. Hneď nasleduje Table.Post.
.
Akurát sa mi nepáči jedna vec. Pri tvorbe formulára si otvorím Table -> ReadOnly. A mám ju otvorenú až do zrušenia formulára. Kvôli pohybu v nej na základe vybraného záznamu vo VST. Keby som toto vedel odstrániť, tak by som bol napojený na tabuľku len v čase tvorby formulára (naplnenie VST, pokiaľ nepoužijem SQL query - a to je väčšina prípadov). To naplnenie VST môžem bez nejakých problémov urobiť natvrdo pomocou SQL query.
.
Raz si mi písal, že otvorená tabuľka nie je problém. Mne sa dostal pod ruky materiál, kde sa riešila optimalizácia výkonu aplikácie. Pre FB bolo jedno z odporúčaní uzatvoriť Table. Z toho sa vymotať neviem. Nezdá sa mi, žeby som mal pri každom pohybe v tabuľke volať Table.Open - Table.Locate() - Table.Close. Vychádzajme z predpokladu, že budem s programom úspešný ;D :o ::)  a v tabuľkách budú 10-tisíce záznamov.
.
OT: prečo mi to automatické formátovanie vždy hodí dva prázdne riadky namiesto jedného. Hurá, vyriešil som to bodkami 8)
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #4 kdy: 19-05-2019, 20:26:00 »
Tak narýchlo som čosi našiel na internete. Až jeden príklad pre mňa. Ale tam si zo štandardného komponentu urobil DB. Touto cestou nechcem ísť. To by som po každej aktualizácii TMS musel všetko znova kompilovať. A ktovie ako by som to zvládol. Môj obľúbený TAdvEdit podporuje niekoľko vstupov. Preto som si ho obľúbil:
text, dátum + čas, celé číslo, mena, float, hexa... Ako by som toto ošetril. Tomu neverím, že by som to zvládol.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #5 kdy: 19-05-2019, 20:31:39 »
Ja nikde, okrem FastReport, nepoužívam DataSource. To je zas nejaká medzivrstva čo si niečo ukrojí zo systémových prostriedkov.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #6 kdy: 20-05-2019, 08:19:03 »
Citace
Vydal bych se cestou implementace datalinku.
Môžeš mi vysvetliť ako to myslíš? Všetko čo som o datalink našiel, bola vždy premena komponentu na DB komponentu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1812
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #7 kdy: 20-05-2019, 09:02:54 »
Citace
Vydal bych se cestou implementace datalinku.
Všetko čo som o datalink našiel, bola vždy premena komponentu na DB komponentu.

Ano, to je jeho primarni poslani. Jeho uzitecnost se da ocenit v propagaci zmeny datasetu. Princip ktery jsem mel na mysli je, ze bys (z te sve tridy TCustomDB) ovladal dataset tedy vkladal zaznamy, editoval, mazal, skroloval atd. a pomoci datalinku naslouchal reakcim na tyto akce a podle typu zmen menil stav nebo hodnoty vizualnich komponent. Cimzto se tedy vracime k "DB aware" principu. Jen by sis jej mohl ohnout pro zve potreby i bez pouziti dodavanych DB aware komponent.

Reci MVC by se pak (s trochou nadsazky) dal datalink povazovat za model, vizualni komponenty za view a ovladac datasetu za controller.
« Poslední změna: 20-05-2019, 09:21:22 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #8 kdy: 20-05-2019, 12:31:32 »
Citace
Princip ktery jsem mel na mysli je, ze bys (z te sve tridy TCustomDB) ovladal dataset tedy vkladal zaznamy, editoval, mazal, skroloval atd. a pomoci datalinku naslouchal reakcim na tyto akce a podle typu zmen menil stav nebo hodnoty vizualnich komponent.
To som predpokladal, ale netuším ako by som to mal zrealizovať.
.
Pozrel som si všetky DB TMS. Vychádzajú zo základných, ktoré dopĺňajú o datalink. Tým pádom predpokladám, že by s nimi nemal byť žiaden problém ako u štandardných DB komponentov. Plus sú tam aj iné. Niektoré vyzerajú naozaj veľmi zaujímavo. Len mne sú skoro všetky nanič.

Teraz k môjmu riešeniu z pohľadu DB TMS. Mám
Kód: Delphi [Vybrat]
  1.  
  2.   TDBEditControl = class(TObject)
  3. *    FAllowZero: Boolean;  // Nemajú to. Musel by som to riešiť
  4. *    FDesired: Boolean;  // Pre mňa dôležité. Musel by som to riešiť. Existuje niečo čo by mi to nahradilo?
  5. *    FEditWinCtrl: TWinControl;  // V princípe bezpredmetné. Pre kontrolu údajov požadované
  6.     FFieldType: TFieldType;  // To si viem zistiť
  7.     FLocalName: string;  // Pokiaľ si dobre pamätám, tak sa to dá nastaviť v DataSet-e.
  8. *    FMinLength: Word;  // To by som musel riešiť
  9.     FNameField: string;  // To sa zadáva v DB komponente
  10.     FOnlyPositive: Boolean;  // Majú to implementované
  11.     FTypeCtrl: TTypeCtrl;  // Teraz sa už obídem bez toho
  12.  
Ak by som použil DB komponenty, tak by som musel riešiť 3-4 * položky a poradie kontroly jednotlivých prvkov pri základnej automatickej kontrole údajov.
Robiť potomkov z ich DB komponentov sa mi naozaj nechce.
.
Je možné tú kontrolu aj s dodržaním poradia (TabOrder) zrealizovať ináč?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #9 kdy: 20-05-2019, 12:32:26 »
Podotýkam, že s windows správami nemám žiadne skúsenosti.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #10 kdy: 20-05-2019, 16:29:38 »
Základ by mal byť niečo také?
Kód: Delphi [Vybrat]
  1. procedure TfrmMainForm.DataChange(Sender: TObject);
  2.  
  3. begin
  4.   if (DataLink.Field <> nil) then
  5.     TAdvEdit(DataLink.Control).Text := DataLink.Field.AsWideString;
  6. end;
  7. .
  8. procedure TfrmMainForm.FormCreate(Sender: TObject);
  9. begin
  10.   DataLink := TFieldDataLink.Create;
  11.   DataLink.Control := advedt1;
  12.   DataLink.FieldName := 'FullName';
  13.   DataLink.DataSource := ds1;
  14.   DataLink.OnDataChange := DataChange;
  15. end;
Hlavne ma zaujíma, či je správne navrhnutá a použitá funkcia DataChange.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1812
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #11 kdy: 20-05-2019, 16:46:10 »
To jde o field datalink. Ne datalink datasetu. Mel jsem na mysli ze bys mohl vyuzit datalink datasetu ve Tve tride TCustomDB ke sledovani zmen celych zaznamu (radku), ne jen hodnot zaznamu (bunek). Kolekci tech komponent (view) by sis tak mohl nechat tam kde je. Je otazkou jak na ten view vyrobit efektivne binding.

Nemam ted cas (ani Delphi) a tohle je na delsi povidani :(
« Poslední změna: 20-05-2019, 16:58:05 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #12 kdy: 20-05-2019, 16:57:02 »
Mne ide o nakopnutie ako na to. V mojej literatúre som sa dočítal, že DataLink je v podstate abstraktná trieda a priamo sa používa len výnimočne.
DataLink vytvorím a čo ďalej :(  No, idem ho študovať.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #13 kdy: 20-05-2019, 17:00:46 »
Asi sa mám odvíjať od toho - príloha. Ale tam nie je žiaden popis. Pozri si Hruška zdroják!
Edit:

Hm, tam je
Kód: Delphi [Vybrat]
  1.   protected
  2.     property DataLinks: TList<TDataLink> read FDataLinks;
  3.  
Tým pádom sa k tomu neviem dostať.
« Poslední změna: 20-05-2019, 17:07:49 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online Delfin

  • Padawan
  • ******
  • Příspěvků: 1812
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #14 kdy: 20-05-2019, 17:15:54 »
Mne ide o nakopnutie ako na to. V mojej literatúre som sa dočítal, že DataLink je v podstate abstraktná trieda a priamo sa používa len výnimočne.
DataLink vytvorím a čo ďalej :(  No, idem ho študovať.

Je, ale duvod proc nepouzivas DB aware komponenty je protoze si chces prizpusobit funkcionalitu, nebo k tomu mas jiny duvod? Datalink slouzi k propagaci zmen datasetu. Predstav si, ze bys mel v te Tve tride TCustomDB metody jako (pseudokod, mam fakt napilno, pisu v browseru):

Kód: Delphi [Vybrat]
  1. type
  2.   TCustomDB= class
  3.   private
  4.     FDataSet: TDataSet;
  5.     FControls: TList<TDBControl>; // kde TDBControl je trida jiz se da snadno predat a precist hodnota z bufferu afektovaneho radku zmeny
  6.   protected
  7.     procedure DataRowUpdated; virtual; // metoda vyvolana datalinkem datasetu po uprave zaznamu
  8.     procedure DataRowDeleted; virtual; // metoda vyvolana datalinkem datasetu po smazani zaznamu
  9.     procedure DataRowInserted; virtual; // metoda vyvolana datalinkem datasetu po pridani zaznamu
  10.   end;

V metodach takove tridy si pak muzes proiterovat kolekci vizualnich prvku FControls a upravit jejich stav a hodnoty k zobrazeni (da se reagovat na vice udalosti, napr. specifickych "bunkam radku"). No a kazda zmena datasetu FDataSet je pak bude pro Tebe vyvolavat. To byla pointa myslenky kterou jsem mel na mysli.
« Poslední změna: 20-05-2019, 17:19:07 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #15 kdy: 20-05-2019, 17:33:25 »
Citace
Je, ale duvod proc nepouzivas DB aware komponenty je protoze si chces prizpusobit funkcionalitu, nebo k tomu mas jiny duvod?
Keď som bol nútený sa ich vzdať, tak som TMS nemal. Problém bol s určitou funkčnosťou. Neviem či tam boli aj chyby. Mám pocit, že áno. Než mať problémy, tak som ich obišiel. A nie som, z tohto dôvodu, sám.
Teraz silne rozmýšľam, žeby som tie DB TMS mohol nasadiť. Len neviem ako riešiť automatickú kontrolu a vlastnosť Desired. Možno ostanem pri TDBEditControl, ktorý bude mať menej vlastností. A nebudem sa starať o zobrazené hodnoty - to by som komplet vyhodil.
DBGrid určite nepoužijem. Môj zlatý VST.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #16 kdy: 20-05-2019, 19:11:11 »
Zdá sa, že ti ide aj o nejaký data aware grid.
V TMS je TDBAdvGrid, odvodený z TAdvStringGrid.
Ten je kompatibilný s TMS štýlmi. Od Office 2003 Blue až po Office 2016 Black, plus Metro Light a Metro Dark.
Upravené demo zobrazuje cca 25 "TMS" štýlov. Pozri png a zip v prílohe.
Zatiaľ sa mi zdá, že celá aplikácia by komplet mohla byť na báze štýlov TMS.
Pravda aj ja používam VST. Tiež sa ho nechcem vzdať. Zatiaľ neviem s istotou, ako to vyriešim.
Intenzívne študujem TMS, aby som sa rozhodol, akou cestou sa vybrať. Mnohé veci fungujú ozaj pekne. Mám zatiaľ veľký rešpekt.
Prikladám vzhľad 6 z cca 25 štýlov, ktoré ponúka TMS.
Je to vylepšené demo z "Demos\AdvToolBar\Office2010Metro".
  • Sú dorobené všetky štýly, ktoré aktuálne TMS podporuje. Ich zoznam je jasný z obrázku
  • TStringGrid som nahradil TAdvStringGrid-om, aby prevzal štýly
Je pravdepodobné, že by tam rovnako dobre fungoval aj TAdvDBGrid, namiesto TAdvStringGrid-u
Viaceré screeny, z dema sú uložené ako png. Pozerám, že príloha png sa mi moc pekne nezobrazuje. V zip archíve sú aj ďalšie. IrfanView png-čka zobrazuje podstatne krajšie, ako vidím tu cez web.
« Poslední změna: 20-05-2019, 19:21:39 od miroB »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #17 kdy: 20-05-2019, 19:42:58 »
Citace
Zdá sa, že ti ide aj o nejaký data aware grid.
To si vôbec netrafil. Ja tu riešim celkový koncept môjho riešenia. Vyzerá to tak, že:
  • ostanem pri tom čo mám
  • použijem DB TMS komponenty. To sa mi dvakrát nechce. Myslím si, že mi to prakticky nič neprinesie. Akurát vyhodím nejaký kód. Ale v tom prípade budem musieť vyriešiť základnú automatickú kontrolu údajov. Tá mi stačí v 90 - 95%. Ďalšiu kontrolu robím len v prípade nejakých väzieb medzi údajmi. Kvôli tomu asi budem musieť ponechať aj pôvodné riešenie s TDBEditCtrl. Pokiaľ mi niečo alebo niekto neosvieti rozum
V žiadnom prípade nechcem rozširovať vlastnosti TMS komponentov. Kto by sa o to potom staral. Jedine, žeby sa to dalo urobiť nejako hromadne na pozadí.
Ja mám vyriešený aj "style" pre VST. Užívateľ si môže vybrať buď bielu farbu pozadia, alebo podľa panela = štýlu. Tieňované, tmavé a svetlé. Tak isto si môže vybrať farbu čiar (mriežky) a iné. Dával som tu snímky s tým, že v prípade záujmu som ochotný to poskytnúť. Nikto sa neprihlásil.
Ja pri tom VST dosť čarujem s farbami + preťahujem medzi nimi uzly. Dosť som sa s tým natrápil. Keby som použil iný komponent, tak neviem či by som to zvládol.
Dosť dlho mi trvalo, kým sa s VST naučil ako-tak pracovať. A teraz by som to zahodil? Vďaka nemu mám jednotný štýl cez celú aplikáciu. Či sa jedná o tabuľky alebo stromy.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #18 kdy: 20-05-2019, 19:45:58 »
Pre istotu Ťa upozorňujem, keď si to tu ešte nečítal, že nie všetky štýly v TMS majú rovnaké názvy, poradie a rovnaký počet!
Edit:
Neviem či si na to natrafil. Majú zvlášť štýl Metro, kde si môžeš zvoliť ľubovoľnú farbu. + tmavý či svetlý, ako to máš v ukážke.
« Poslední změna: 20-05-2019, 19:50:09 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #19 kdy: 20-05-2019, 20:31:41 »
Pre istotu Ťa upozorňujem, keď si to tu ešte nečítal, že nie všetky štýly v TMS majú rovnaké názvy, poradie a rovnaký počet!
Edit:
Neviem či si na to natrafil. Majú zvlášť štýl Metro, kde si môžeš zvoliť ľubovoľnú farbu. + tmavý či svetlý, ako to máš v ukážke.
Áno, viem o tom. Demo som upravil tak, aby akceptovalo rozdiely:
AdvStyleIF.TTMSStyle vs AdvToolBarStylers.TToolBarStyle
Rozdielov nie je veľa. TToolBarStyle obsahuje navyše bsOfficeXP. To je jediné. Inak je už poradie rovnaké.
Úpravu mám na dvoch miestach v danom demo: vo FormCreate (načítanie do ComboBoxu) a v ComboBox1Change (ošetrené rozdiely).
vyriešil som to raz a prevždy, aby som nemusel všade ručne cpať tie zoznamy.
Nikde ich nemajú všetky. To sa mi nepáčilo.
Stačí aby som tie dve veci hodil do každého TMS dema, kde sú štýly.
Ako vidieť z obrázkov, funguje aj Metro aj Office, aj všetky Windows štýly od XP po Win 10.
Je to skontrolované. Neposlal som všetkých 25, lebo by presahovali 500 kB.
« Poslední změna: 20-05-2019, 20:53:43 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #20 kdy: 20-05-2019, 20:45:27 »
Citace
V žiadnom prípade nechcem rozširovať vlastnosti TMS komponentov. Kto by sa o to potom staral. Jedine, žeby sa to dalo urobiť nejako hromadne na pozadí.
Hodlám používať len TMS komponenty, ktoré akceptujú štýly. Preto sa s tým dosť hrajem. Aby som nešiel naslepo.
Citace
Ja pri tom VST dosť čarujem s farbami + preťahujem medzi nimi uzly. Dosť som sa s tým natrápil. Keby som použil iný komponent, tak neviem či by som to zvládol.
Dosť dlho mi trvalo, kým sa s VST naučil ako-tak pracovať. A teraz by som to zahodil? Vďaka nemu mám jednotný štýl cez celú aplikáciu. Či sa jedná o tabuľky alebo stromy.
Podobne..
Pokúsim sa ísť tou cestou, že vyberiem TMS štýl, ktorý sa bude podobať na VST. Aj VST trochu poladím. Nepotrebujem hogo-fogo. Vzhľad len taký, aby bolo všetko dobre rozoznať. Na čierne, či veľmi tmavé pozadia zatiaľ nemyslím.
Aj keď to dynamické menenie 25 štýlov v TMS je fakt pôsobivé. Celá aplikácia naraz. Bez akýchkoľvek veľkých úprav. Na to  majú v TMS TAdvFormStyler, ktorý zmení štýl vštkých komponentov, čo sú na to navrhnuté.  Vrátane TAdvStringGrid a TDBStringGrid. Zdá sa, že takých komponentov je tam mnoho.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #21 kdy: 20-05-2019, 22:15:09 »
Pre istotu Ťa upozorňujem, keď si to tu ešte nečítal, že nie všetky štýly v TMS majú rovnaké názvy, poradie a rovnaký počet!
Edit:
Neviem či si na to natrafil. Majú zvlášť štýl Metro, kde si môžeš zvoliť ľubovoľnú farbu. + tmavý či svetlý, ako to máš v ukážke.
Áno, viem o tom. Demo som upravil tak, aby akceptovalo rozdiely:
AdvStyleIF.TTMSStyle vs AdvToolBarStylers.TToolBarStyle
Rozdielov nie je veľa. TToolBarStyle obsahuje navyše bsOfficeXP. To je jediné. Inak je už poradie rovnaké.
Opravujem je tu ďalší štýl: AdvMenuStylers.TOfficeStyle. Je určený pre Menu. Ten nemá "Office 2003 Classic" a "Windows XP". A je trochu viac rozhádzaný. Ale vyriešim aj to, aby som nestrácal čas s demami.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #22 kdy: 21-05-2019, 08:35:01 »
Ak máš záujem, tak Ti môžem poslať na to hotové riešenie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #23 kdy: 21-05-2019, 11:38:28 »
Ak máš záujem, tak Ti môžem poslať na to hotové riešenie.
Jasne, že mám záujem. Rád pošlem aj to svoje. Len, aby sme sa náhodou neprevinili voči licencii.
Moje aktualizované zoznamy štýlov sú na obrázku. V každom riadku je len kompatibilný štýl. Screen je z MS Excel tabulky. Štýl TAdvPanelStyle, bol rozhádzaný najviac.
Poznámka: TAdvPanelStyle v kombinácii so všetkými ostatnými TMS spôsobil haváriu demo programu. Tomu by som sa vyhýbal.
Poznámka: Štýly VCL a TMS nepoužívať v jednom programe. Je to dôvod havárie dema!
Moja prvotná požiadavka bola možnosť kvalitného menu - Štýly som riešil v rámci prieskumu.
« Poslední změna: 21-05-2019, 11:45:01 od miroB »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #24 kdy: 21-05-2019, 12:03:26 »
V prílohe.
Ten Excel si si mohol ušetriť. Stačilo si ho vypýtať ;D
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #25 kdy: 21-05-2019, 12:50:53 »
Fiiha, ďakujem. Vidím tam JSON a RTTI !

Moje riešenie je jednoduché pre rýchlu potrebu.
Pripájam kód ako doplnok:
  • demo: \tmssoftware\TMS Component Pack\Demos\AdvToolBar\Office2010Metro\Office2010Demo.dproj
  • a na báze Excel tabuľky TMS štýlov. Viď aj obr. v príspevku vyššie.
TToolBarStyle je použitý ako základ pre naplnenie riadiaceho ComboBoxu
Sú vyriešené zoznamy štýlov:
  • TToolBarStyle,   TTMSStyle,   TOfficeStyle
  • Metro Dark a Light
  • Nie je rieseny styl : TAdvPanelStyle. Dal by sa riesit podobne ako je "case AdvFormStyler1.Style of"
Malo by fungovať hneď po dosadení do projektu Office2010Demo.dproj.
Pozor:
- FormCreate : treba skombinovať so stávajúcim kódom dema
- ComboBox1Change je komplet
« Poslední změna: 21-05-2019, 12:57:19 od miroB »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #26 kdy: 21-05-2019, 13:05:33 »
JSON používam na uloženie informácii o aplikácii.
RTTI je tam jedine kvôli získaniu názvu vymenovanej položky. Ináč s ním nikdy nepracujem. Pre mňa to už je vyššia škola.
Riešenie je univerzálne a nezávislé na prípadných zmenách v budúcnosti. Ak by nastali, tak je potrebné vykonať kontrolu a prípadne to upraviť.
Písal si, že FormStyler sa postará o všetko čo je na ňom. Podľa mňa to nie je pravda. Netestoval som to. Skús si nahodiť PageControl.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #27 kdy: 21-05-2019, 13:25:24 »
Písal si, že FormStyler sa postará o všetko čo je na ňom. Podľa mňa to nie je pravda. Netestoval som to..
Máš pravdu ty. Napr. ani AdvTreeView sa nechytá.
Vychádzal som z TMS "TAdvStringGrid Developers Guide.pdf", citujem:
"This means that with a TAdvFormStyler on the form, setting the style on this component will automatically change the style of all TMS components on the form that are TMS style interface compliant and thus also TAdvStringGrid."
U každého komponentu treba preto pozrieť návody na "TMS style interface compliant", alebo si prakticky overiť.
..Skús si nahodiť PageControl.
Zrovna alternatívy PageControl majú "pokryté", ako som vyrozumel z rôznych demo. Pozri napr: TMS TAdvOfficePager.pdf
« Poslední změna: 21-05-2019, 13:33:36 od miroB »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #28 kdy: 21-05-2019, 14:18:06 »
Čaro TMS nie je v štýloch, ale v ich funkčnosti. To akurát môžeme robiť machrov pre užívateľmi akí sme šikovní :D a koľko sme sa museli natrápiť kým sme to zmakli. Vraj to už vyšlo/vychádza z módy.
Taký AdvEdit je pre mňa úžasný. Použijem jediný druh komponentu na zobrazenie x typov. Druhý je StringGrid, kde si môžeš napchať čo chceš. Ja som s ním ešte nepracoval, ale Daniel Andraščík si bez neho svoje aplikácie nevie predstaviť.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #29 kdy: 21-05-2019, 15:35:18 »
Čaro TMS nie je v štýloch, ale v ich funkčnosti..
To je na diskusiu.. Na príklade "Office2010Demo.exe" je vidieť, že aj vlastnosti Menu sa menia na báze štýlov. Porovnaj klik na menu "File" pre novšie a staršie štýly.
Ba už aj prvý vzhľad menu nie je rovnaký.
Je to vlastne tvar office verzii pred 2007, pri 2007 a po 2010.
Alebo tiež štýly od win 7 vrátane. Menu "File" tak produkuje rozne zobrazenia, v zavislosti od stylov

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #30 kdy: 23-05-2019, 11:17:05 »
Pre istotu Ťa upozorňujem, keď si to tu ešte nečítal, že nie všetky štýly v TMS majú rovnaké názvy, poradie a rovnaký počet!
K TMS štýlom, čo sme rozvíjali v príspevkoch vlákna za uvedeným citátom:
TAdvFormStyler spája všetky typy štýlov a ak je na Form-e, je nadradený všetkým ostatným "..Styler"-om.
Napriklad: tsOffice2003Blue v TAdvFormStyler, automaticky nastaví osOffice2003Blue aj v AdvMenuOfficeStyler1 a td.
Viac info pozri tu: https://www.tmssoftware.com/site/atbdev3.asp
Záver: nie je potrebné robiť prevody. Napríklad moja prevodná Excel tabuľka, resp naše kódy, čo boli vyššie zverejnené vo formáte txt, sú vyriešené komponentou TAdvFormStyler.
« Poslední změna: 23-05-2019, 11:18:43 od miroB »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #31 kdy: 23-05-2019, 12:00:58 »
Žeby? Nastavil som tsOffice2010Black. Pri komponentoch som nenastavoval nič.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #32 kdy: 23-05-2019, 15:59:25 »
Žeby? Nastavil som tsOffice2010Black. Pri komponentoch som nenastavoval nič.
Keby si si dal námahu a vyskúšal napríklad demo: AdvGlowButton
Na okno pridáš TAdvFormStyler.
Vyberieš v Design time pre AdvFormStyler1.Style tvoj štýl tsOffice201Black. Uvidíš.
Dá sa to potom v runtime prekryť v danom príklade voľbou z ComboBoxu. Ten reaguje len na dva buttony. Ostatné zostane podľa TAdvFormStyler.
Stačí si prečítať návod.
« Poslední změna: 23-05-2019, 16:01:07 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 505
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #33 kdy: 23-05-2019, 17:04:07 »
A úplne výborné je, že TAdvFormStyler má property ComboBox, dostupnú aj v DesignTime . Keď sa v TAdvFormStyler vyberie reálny ComboBox, okamžite sa naplní všetkými hodnotami štýlov typu TTMSStyle (Enum definovaný v AdvStyleIF.pas ).
Potom aj bez priadnia udalosti OnChange (šetríme kód a námahu), sa vykoná priradenie štýlu. Samozrejme podľa toho, akú položku si užívateľ vyberie.
« Poslední změna: 23-05-2019, 17:05:51 od miroB »

Offline Faltynek

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: D5 Enterprise, D2009
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #34 kdy: 15-06-2019, 11:39:01 »
Ahoj,
omlouvám se za spíš filosofický povzdech, protože DB skoro nepoužívám, ale pořád tady čtu dokola o problémech s databázovými aplikacemi. To v 21. století neexistuje snadná práce s databázemi bez chyb a problémů? To by snad mělo být součástí vývojářského softwaru jakým Delphi je, popř. s použitím SQL, a ne aby ses musel pořád patlat v těchto "nízkoúrovňových" problémech jak se připojit, jak data zobrazovat apod.
Vždyť to bylo jednoduchý programovat už před 20 lety a dnešní prostředky to neumí nebo umí blbě? Nezabíjejte mě za tento příspěvek (mám rodinu), asi vůbec nevím o čem mluvíte, ale myslím mám trochu pravdy.

Dalibor.
Dalibor (D2009 Enterprise, dřív D5Enterprise)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4325
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Moje MCVE - pripomienky a návrhy
« Odpověď #35 kdy: 15-06-2019, 12:16:25 »
Podľa mňa je to tým, že problematika DB je veľmi široká a zložitá. Pri jednoduchých projektoch nepredpokladám problémy.
Zoberme si taký DBGrid. Osobne ho nepoužívam, takže ak napíšem nejaký nezmysel, tak ma nekameňujte. Ide o princíp.
Bežne zobrazujem v mriežke (tu mriežkou myslím DBGrid, VST...) údaje z viacerých tabuliek. Robím to pomocou VirtualStringTree. Zobrazím si tam čo chcem a nasúkam si doň údaje podľa potreby. Nemám žiadne obmedzenie a tým pádom ani problémy.  Mám pocit, že v DBGrid by som to vôbec neurobil. Pod obmedzením mám na mysli:
  • údaje, ktoré potrebujem mať k dispozícii
  • vykresľovanie riadkov a buniek. Podľa diskusií to je v DBGrid dosť problém
  • zoraďovanie údajov podľa jednotlivých stĺpcov. Vo VST to môže byť aj podľa viacerých stĺpcov naraz
V mriežke nikdy needitujem údaje. Tým sa vyhnem mnohým problémom.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.