Autor Téma: StringGrid - uložení hesla do buněk  (Přečteno 1824 krát)

Marek.V

  • Host
StringGrid - uložení hesla do buněk
« kdy: 14-02-2019, 22:18:27 »
Dobrý den.
Bych chtěl do jednoho sloupcu ukladat hesla.
Aby ale byli tak jak to jde v editu
edit1.PasswordChar := '*';

Našel jsem si řešení.
Ale ono to překresli až zadam cele heslo.
Pomužete?

 
Kód: Delphi [Vybrat]
  1. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  2.   Rect: TRect; State: TGridDrawState);
  3. var
  4.   drawText: String;
  5. begin
  6.   drawText := StringGrid1.Cells[ACol, ARow];
  7.   if ACol = 2 then begin
  8.     drawText := StringOfChar('*', Length(WideString(drawText)));
  9.   end;
  10.   StringGrid1.canvas.TextRect(Rect, Rect.Left +1, Rect.Top + 1,drawText);
  11. end;

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1820
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:StringGrid - uložení hesla do buněk
« Odpověď #1 kdy: 14-02-2019, 23:24:23 »
Pokud se jedna o nastaveni znaku hesla pro inplace editor string gridu, dal by se pouzit kuprikladu nasledujici, pomerne nepekny postup (ale string grid je celkove nepekny). V udalosti OnGetEditMask poslat inplace editoru zpravu pro zmenu znaku hesla, napr.:

Kód: Delphi [Vybrat]
  1. type
  2.   TStringGrid = class(Vcl.Grids.TStringGrid)
  3.   end;
  4.  
  5. procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: string);
  6. begin
  7.   if ACol <> 2 then
  8.     SendMessage(TStringGrid(Sender).InplaceEditor.Handle, EM_SETPASSWORDCHAR, 0, 0)
  9.   else
  10.     SendMessage(TStringGrid(Sender).InplaceEditor.Handle, EM_SETPASSWORDCHAR, Ord('*'), 0)
  11. end;
« Poslední změna: 14-02-2019, 23:26:49 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!

Marek.V

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #2 kdy: 15-02-2019, 07:24:59 »
Tak toto mi nějak nefunguje.

Pokud jsem to pochopil tak ,DrawCell to zadane heslo překresluje, ale pod ním by mělo být furt to zadane,ne?
GetEditMask jej změní, takže už to zadane heslo nezjistím.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1820
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:StringGrid - uložení hesla do buněk
« Odpověď #3 kdy: 15-02-2019, 07:54:52 »
Psal jsi:

Ale ono to překresli až zadam cele heslo.

Slova "az zadam" me vedlo k uvaze, ze chces aby inplace editor (coz je komponenta pro editaci hodnot v gridu) skryl text pri editaci. Tak asi ne, no. Zkus tedy problem rozvest...

Pokud jsem to pochopil tak ,DrawCell to zadane heslo překresluje, ale pod ním by mělo být furt to zadane,ne?

Ano, v prvnim prispevku uvedeny kod zachova hodnotu ulozenou a uzivateli v gridu kresli hvezdicky. Kod co jsem poslal ja pak jen nastavuje inplace editoru znak hesla. Obsah se nijak neztrati ani neposkodi. Jde o rozsireni Tveho kodu, ne nahradu. Spojenim obou by melo dojit k tomu, ze uzivatel v danem sloupci uvidi vzdy jen hvezdicky (jak pri zobrazeni bunek, tak pri jejich editaci) a ten skryty obsah bude pote citelny napr. pres property Cells[].

P.S. Jinak samozrejme nelze nastavit masku editoru v pripade zobrazeni znaku hesla, protoze bys namisto podlomitek (resp. placeholderu znaku textu dle masky) videl hvezdicky.
« Poslední změna: 15-02-2019, 08:19:09 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!

Marek.V

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #4 kdy: 15-02-2019, 09:31:19 »
No prostě potřebují, aby se to chovalo jako komponenta edit s nastaveným PasswordChar := '*';
Když píše heslo, všichni čumilové vidí jen tečky, ale kdykoliv se da to heslo zjistit.
Label1.Caption := edit1.Text;

Úplně by mi stačilo, kdyby to uměla jen jedna buňka v celem gridu.
Někde jsem viděl sample, jak se do buňky gridu vkreslila jiná komponenta.
Tedy u mně ten edit.
Ale to je mimo mé znalostí.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1820
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:StringGrid - uložení hesla do buněk
« Odpověď #5 kdy: 15-02-2019, 09:34:41 »
No prostě potřebují, aby se to chovalo jako komponenta edit s nastaveným PasswordChar := '*';

Co je zminovane to? Inplace editor (komponenta, jenz uvnitr gridu obstarava editaci)? Zbytku textu prispevku nerozumim.
« Poslední změna: 15-02-2019, 09:36:12 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!

Marek.V

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #6 kdy: 15-02-2019, 10:20:28 »
Citace
Co je zminovane to? Inplace editor (komponenta, jenz uvnitr gridu obstarava editaci)

Možna jsem to našel
https://stackoverflow.com/questions/5306037/put-a-tcheckbox-inside-a-tstringgrid-in-delphi
Prostě v nějake bunce je vykreslený button nebo CheckBox
Pokud jsem to pochopil, tak button se vloží na form a procedura DrawCell ho překresli do bunky gridu.
Kdybych to same udělal s tou kompnentou edit, bylo by to vyřešene.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1820
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:StringGrid - uložení hesla do buněk
« Odpověď #7 kdy: 15-02-2019, 10:33:13 »
Asi si porad nerozumime. String grid editor ma. Rika se mu inplace editor. Neni treba vkladat edit boxy. Muzes mit 2 udalosti, Tvuj OnDrawCell, kde budes namisto textu bunky kreslit hvezdicky, tak jak to mas v prvnim prispevku. Tomu inplace editoru pak muzes napr. v udalosti OnGetEditMask poslat zpravu, aby misto znaku zobrazoval hvezdicky. Tim docilis toho, ze uzivatel nikdy neuvidi psany text, byt ten text bude v gridu ulozen a bude citelny napr. pomoci vlastnosti Cells[].

V cem Ti ten zpusob jenz jsem poslal nefunguje?
I'm a soldier, so don't panic! I know the underground! I like the WTFPL license! No more Google, go duck, go!

Marek.V

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #8 kdy: 15-02-2019, 11:53:40 »
Citace
OnDrawCell, kde budes namisto textu bunky kreslit hvezdicky, tak jak to mas v prvnim prispevku.

Ano, o to mi jde.
Ale v tom prvním prispevku, když zadavam to heslo tak jde vidět.
Až když opustím tu bunku a kliknu někam jinam ji to překresli.
V tom text editu jdou vidět tečky už když heslo zadavam.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1820
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:StringGrid - uložení hesla do buněk
« Odpověď #9 kdy: 15-02-2019, 11:57:45 »
Ale v tom prvním prispevku, když zadavam to heslo tak jde vidět.
Až když opustím tu bunku a kliknu někam jinam ji to překresli.

No pokud se jedna o inplace editor string gridu, tak je treba mu nastavit znak hesla. Viz. napr. druhy prispevek tohoto vlakna.

V tom text editu jdou vidět tečky už když heslo zadavam.

Porad nerozumim. Kde tedy zadavas to heslo? Ja mel celou dobu za to, ze pouzivas inplace editor string gridu. Ted pises o text editu. Co je tedy ten text edit?

Prijde mi to jako celkem dlouha smycka. Pokud vis co je inplace editor a jde Ti o nastaveni znaku hesla a zkousel jsi kod z druheho prispevku, popis co jsi myslel vetami "Tak toto mi nějak nefunguje. GetEditMask jej změní, takže už to zadane heslo nezjistím." Pokud zadavas text z jine komponenty, rozved co je za problem.
« Poslední změna: 15-02-2019, 12:09: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!

Marek.V

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #10 kdy: 15-02-2019, 12:41:20 »
Se to tu cele zaplantava.
Vykašlem se na celý edit.
Otazka zní, jak vložít do buněk nějakeho sloupce StringGridu hesla, tak aby jen nikdo neviděl i při vkladaní a mohly by se programově kdykoliv našist?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #11 kdy: 15-02-2019, 13:07:40 »
Excellent
Rated 1 time
Citace
Otazka zní, jak vložít do buněk nějakeho sloupce StringGridu hesla, tak aby jen nikdo neviděl i při vkladaní a mohly by se programově kdykoliv našist?
Prosím Ťa, prečítaj si celú diskusiu aspoň 5x.
V prvom rade sa snaž pochopiť čo si napísal. NIE čo si chcel napísať. To je rozdiel. Je to horšie než by som to písal ja. A to už je čo povedať ;D .
Potom sa snaž pochopiť odpovede. Máš tam odpoveď na to, čo sa pýtaš.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #12 kdy: 15-02-2019, 13:11:19 »
Ešte dodatok. Tvoje vyjadrovanie je mizerné. Snaž sa druhýkrát písať po česky. Nemôžem napísať spisovne, lebo nemáte kodifikovanú češtinu. Tu nie sme na nejakej sociálnej stránke. Tu sa musíš vyjadrovať presne a jasne. Až matematicky. Pomôže aj priloženie obrázku.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4338
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #13 kdy: 15-02-2019, 14:17:13 »
Dojem nie je pojem. Ja som to pomotal. Vy nemáte češtinu uzákonenú ako úradný jazyk. A to je iné než kodifikácia.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1820
  • Karma: 70
  • SW konzultant
    • Verze Delphi: 2009, Tokyo, Rio
Re:StringGrid - uložení hesla do buněk
« Odpověď #14 kdy: 16-02-2019, 10:08:35 »
Mozna, a to opravdu hadam, se jedna o tento problem:



Dochazi k nemu (Tokyo) pri zapnutem DefaultDrawing s DrawingStyle ruznym od gdsClassic pri kresleni OnDrawCell textu jineho nez je v bunce ulozen a dana bunka se prida do vyberu range select bez focusu (pripadne se ji bez range selectu nastavi focus a pote se focus presune na jinou komponentu).

Smysl to dava, jelikoz se pruhledny text kresli pres gridem predem vykresleny ulozeny text. Problem je v tom, ze v tomto pripade nestaci vyplnit dany obdelnik a vykreslit text, jelikoz se stylovany vyber kresli pred ulozenym textem. Poradi je tedy v takovem pripade vykresleni stylovaneho vyberu, ulozeneho textu a vyvolani OnDrawCell.

Resenim pro takovy pripad je vypnout DefaultDrawing a kreslit vse sam pripadne odstavit vychozi kresleni textu prekrytim metody DrawCell (se zkopirovanim casti kodu VCL).

Skutecnym resenim pak ukladani dat v separatni kolekci a kresleni v gridu dle teto kolekce (de-facto virtualni rezim).
« Poslední změna: 16-02-2019, 10:13:24 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!