Autor Téma: "Nedokončený" klik  (Přečteno 1813 krát)

Offline František

  • Guru
  • *****
  • Příspěvků: 706
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
"Nedokončený" klik
« kdy: 21-09-2016, 15:58:17 »
(ani neviem ako to pomenovať)

mám listbox so zoznamom súborov a memo do ktorého zobrazím texťák podľa kliku do listboxu.
v memo ho editujem a na onexit sa pýtam či bola zmena a že či ho uložit ... toto je ok, a uložím to
no a problem je takýto: (vzniká len pri zmene)
onexit z mema vznikne vtedy, keď kliknem na listbox na iný item v listboxe, lenže klik sa neuskutočný, nakoľko po onexite (po zmene v memo) nedojde k zmene/vybratiu itemsu a výberový (modrý) kurzor behá s myšou hore dole...
neviem či je to zrozumiteľný popis, ale snáď to pochopíte ...
« Poslední změna: 21-09-2016, 16:00:42 od František »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6053
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:"Nedokončený" klik
« Odpověď #1 kdy: 21-09-2016, 16:38:58 »
Ale to si dal na zlé miesto. Tu sú databázy a mal si to dať do Delphi - obecné
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 706
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:"Nedokončený" klik
« Odpověď #2 kdy: 22-09-2016, 09:05:32 »
riešenie mám cez cez zámenu ListBoxu za Listview (OnChanging), ale nie je to ono

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6053
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:"Nedokončený" klik
« Odpověď #3 kdy: 22-09-2016, 09:15:46 »
A VirtualStringTree?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:"Nedokončený" klik
« Odpověď #4 kdy: 22-09-2016, 10:00:06 »
onexit z mema vznikne vtedy, keď kliknem na listbox na iný item v listboxe, lenže klik sa neuskutočný, nakoľko po onexite (po zmene v memo) nedojde k zmene/vybratiu itemsu a výberový (modrý) kurzor behá s myšou hore dole...
neviem či je to zrozumiteľný popis, ale snáď to pochopíte ...
A to se tyka VCL nebo opice? Co jsem zkousel ve VCL v te nove starter edition, tak to TMemo.OnExit vznika nepodminene, jakmile ztrati focus bez ohledu, kam se v listboxu klika.

Tak bud jsem nepochopil tvuj popis nebo tam nekde neco prasis... Me nikde zadny vyberovy kurzor s mysi nebeha...

Offline František

  • Guru
  • *****
  • Příspěvků: 706
  • Karma: 7
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:"Nedokončený" klik
« Odpověď #5 kdy: 22-09-2016, 10:23:49 »
vcl ...

postup je takýto
1. klik na listbox
2. načítanie obsahu súboru do memo podľa výberu
3. klik na listbox
4. načítanie obsahu súboru do memo podľa výberu

keď nič nemením - funguje normálne

ale keď
1. zmením niečo v memo (v onchange to zaregistruje)
2. kliknem v listboxe na inú položku
3. memo na onexit zisťuje či bola zmena a pýta sa že či ju uložiť
4. uložím/neuložím
5. memo sa nezmeni a modrý výberový rámček je v listoxe - ale klik sa neuskutočil = nenačítal sa súbor do memo - a keď pohnem myšou nad listboxom, modrý výberový riadok sa pohybuje, ale nič sa nemení !!!
6. keď tam znovu kliknem, až vtedy sa zmení

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3292
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:"Nedokončený" klik
« Odpověď #6 kdy: 22-09-2016, 11:10:37 »
3. memo na onexit zisťuje či bola zmena a pýta sa že či ju uložiť
No to je tim "pytanim" tj. zobrazeni dialogu a sebranim focusu listboxu pred dokoncenim obsluhy kliknuti.

Muzes to vyresit napr. tak, ze si das ukladani souboru s celym cirkusem potvrzovani do udalosti TListBox.OnClick, kde nez nactes novy obsah, tak otestujes, jestli bylo memo zmeneno a kdyz jo, tak se zeptas, ulozis, vynulujes priznak zmeny a teprve si nactes jiny soubor v pripade, ze se zmenil ItemIndex.

To bude fungovat, pokud jsou na formulari pouze dva focusable widgety: listbox a memo. Pokud je tam nejaky dalsi focusable widget, tak musis v TMemo.OnExit otestovat TListBox.Focused a pokud ano, tak nedelat nic a nechat to mechanismu vyse, pokud ne, musis vyvolat proceduru pro zapis zmeny s potvrzenim BFU stejne, jako se to delalo vyse v OnClick. A to by melo fungovat spravne.