Autor Téma: ComboBox.ItemIndex := Cosi; Nie je zobrazený text  (Přečteno 377 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5439
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« kdy: 02-08-2020, 22:39:02 »
Týka sa to len jedného formulára a všetkých druhov ComboBox (štandardné i TMS) na ňom.
Overil som si, že ItemIndex > -1 a napriek tomu Text pri zobrazení formulára nie je vykreslený.
Potom už nie je problém.
Opäť nerozumiem a netuším kde hľadať chybu.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2998
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #1 kdy: 03-08-2020, 08:45:26 »
Potom už nie je problém.
Opäť nerozumiem a netuším kde hľadať chybu.
To vypada na klasicky problem inicializace event driven prostredi tj. dochazi k asynchronnimu spousteni nekterych udalosti v nevhodnout dobu s ohledem na stav nekterych objektu.

Snazit se to poradi zmenit muze sice problem odstranit, ale pozdeji pri nejakem zasahu do kodu se zase muze nekde objevit ev. u neceho jineho.

My to resime duslednym oddelenim inicializace a normalniho provozu tj.
- po konstrukci se formular nachazi ve stavu inicializace
- ve stavu inicializace neobsluhujeme zadne udalosti
- po dokonceni inicializace provedeme aktualizaci vsech stavu vsech widgetu
- zrusime stav inicializace a zahajime normalni provoz

Mame na to predka spolecneho vsem formularum, s jehoz pomoci generujeme asynchronni udalosti odvozene od prekryte DoShow



Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5439
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #2 kdy: 03-08-2020, 18:09:42 »
Podľa všetkého máš pravdu. Mal som problém s vykresľovaním iných vecí. Zmenil som poradie funkcií. Na začiatok v FormShow som dal funkciu, ktorá volá udalosti komponentov. Ostali mi visieť ComboBoxy-y a dva RadioGroup-y.
Len ten popis je na mňa priveľa. Hlavne sa nechytám pri tej inicializácii.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2998
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #3 kdy: 03-08-2020, 19:20:50 »
Len ten popis je na mňa priveľa. Hlavne sa nechytám pri tej inicializácii.
Tak jeste jednou v kostce:

Nekde u prapredka formulare si definujes protected member, napr.
Kód: Delphi [Vybrat]
  1. FInitDone: boolean;
a ten je po konstrukci formu false.

Kazdy event handler zahajis testem
Kód: Delphi [Vybrat]
  1. if not FInitDone then
  2.   exit;

Pak si vyrobis nejakou asynchronni event po zobrazeni formulare, provedes aktualizaci stavu vsech widgetu a nastavis FInitDone na true.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5439
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #4 kdy: 03-08-2020, 19:44:30 »
Je vo poriadku, že mi FormShow zbehne 2 x? Obsah udalosti sa spustí len raz.
Citace
Pak si vyrobis nejakou asynchronni event po zobrazeni formulare, provedes aktualizaci stavu vsech widgetu a nastavis FInitDone na true.
Tu sa môžem akurát  ;D ;D ;D . Skúsim si o tom niečo nájsť.
« Poslední změna: 03-08-2020, 19:46:13 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5439
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #5 kdy: 03-08-2020, 19:56:48 »
Prikladám taký zaujímavý obrázok. Ja mám všade použité TMS komponenty. Predpokladám, že to súvisí s nimi.
Mám funkciu na nastavenie TMSStyler-s. Tá sa spúšťa pri spustení aplikácie - t.j. Styter-s sú nastavené.
  • Ak ju nespustím vo FormCreate, tak mám taký podivný výsledok. Hlavný PageControl má nastavenie nevie podľa čoho. Typujem si na Metro. Všetky ostatné sú v poriadku
  • Pri jej spustení (znovu nastavenie Styler-s na tie isté hodnoty) to je v poriadku
Uvidím čo sa mi podarí urobiť. Skúsim zistiť dôvod, prečo sa to deje na tomto formulári. Predpokladám, že dôvodom je skutočnosť, že sa na formulári dá nastaviť/zmeniť téma a ja ju ihneď aplikujem.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2998
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #6 kdy: 03-08-2020, 20:10:05 »
Je vo poriadku, že mi FormShow zbehne 2 x? Obsah udalosti sa spustí len raz.
Tomu nerozumim. FormShow je handler OnShow udalosti? Tak kdyz se spusti 2x, jak to, ze se "obsah udalosti" spusti jen jednou?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5439
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #7 kdy: 03-08-2020, 20:24:55 »
Citace
FormShow je handler OnShow udalosti?
Áno.
Citace
Tak kdyz se spusti 2x, jak to, ze se "obsah udalosti" spusti jen jednou?
Mám tam if..
V OnShow to bolo v rámci hľadania chýb. Ale už som to prehodil do OnCreate, lebo výsledok je ten istý.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5439
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:ComboBox.ItemIndex := Cosi; Nie je zobrazený text
« Odpověď #8 kdy: 04-08-2020, 21:03:21 »
Chyba bola nakoniec niekde úplne inde. Miešal som dokopy Color a ItemIndex.
Bez nakopnutia tu by som to ťažko našiel.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.