Autor Téma: StringGrid - uložení hesla do buněk  (Přečteno 1699 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ů: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 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ů: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 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ů: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 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ů: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 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ů: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 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ů: 4113
  • Karma: 36
    • 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ů: 4113
  • Karma: 36
    • 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ů: 4113
  • Karma: 36
    • 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ů: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
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 WTFPL license! No more Google, go duck, go!

Vratik

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #15 kdy: 02-03-2019, 09:28:00 »
Dobrý den.
Jak vycentrovat písmo v buňce?
taCenter znám.
Ale když mám čísla
12,2
12,44
123,12

Tak aby byli uprostřed, ale tak jak je vidíte.





Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #16 kdy: 02-03-2019, 10:51:58 »
Nerozumiem o čo Ti ide. Takých nás asi bude viac. Veď si napísal, že taCenter poznáš. Číslo je v bunke len text. Keď takto vycentruješ iný text, tak sa musia vycentorvať aj čísla.
PS: StringGrid nepoznám, tak sa snáď nemýlim.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Vratik

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #17 kdy: 02-03-2019, 21:50:23 »
Poor
Rated 1 time
když použiju taCenter, bude každý řádek vycentrovaný zvlášť.
Když v prvním řádku bude 10 čísel, druhem 9, třetím 8, atd
Na desátém bude jen jedno.
Tak to bude vypadat jak trychtýř a ne tak jak jsem to uvedl.

A další problém.
Options - goEditing a mužů do gridu psát.
poklepám na buňku a vidím blikat kurzor.
Když však zvětším font na 16 (mam Times New Roman), už ten blikající kurzor nejde vidět.
Proč?
Půjde to nějak pořešit?

Vratik

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #18 kdy: 02-03-2019, 22:01:02 »
takže nepotřebují asi taCenter, ale na každém řádku tabulátor.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #19 kdy: 02-03-2019, 22:36:18 »
Už Ti rozumiem.
Nemá StringGrid niečo ako Margin/okraj? Tak by si to mohol zarovnať vľavo a ten okraj by sa postaral o to, aby to nebolo nalepené na ľavý okraj.
Len si uvedom, že pri každej zmene šírky stĺpca ho budeš musieť prepočítať.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #20 kdy: 02-03-2019, 22:40:44 »
Hm, v takýchto prípadoch sa používa skôr zarovnanie na desatinnú čiarku. Aby to bolo dobre čitateľné a užívateľ už pri prvom pohľade vedel s ako veľkým číslom má do činenia.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Vratik

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #21 kdy: 03-03-2019, 08:52:48 »
a co ten druhý dotaz?
Je řešitelný, nebo to je nějaka chyba gridu?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #22 kdy: 03-03-2019, 09:00:19 »
K tomu sa vyjadriť neviem. Nemám o tom vedomosti.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Padawan
  • ******
  • Příspěvků: 1721
  • Karma: 66
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:StringGrid - uložení hesla do buněk
« Odpověď #23 kdy: 03-03-2019, 10:10:55 »
Jak vycentrovat písmo v buňce? taCenter znám.

V jakem kontextu se bavime o taCenter a komponente TStringGrid? Jde o vlastni kresleni bunek? Jde o VCL nebo FMX? Jaka verze Delphi?

takže nepotřebují asi taCenter, ale na každém řádku tabulátor.

Tomu bych neveril.

A další problém. Options - goEditing a mužů do gridu psát. poklepám na buňku a vidím blikat kurzor. Když však zvětším font na 16 (mam Times New Roman), už ten blikající kurzor nejde vidět. Proč? Půjde to nějak pořešit?

Napr. v Delphi Tokyo VCL za to muze nedostatecna vyska radku (presneji, z nej nasledne vypocteneho hranicniho obdelniku inplace editoru). V pripade zmineneho fontu je v uvedene verzi Delphi treba nastavit alespon 25. Nebo implementovat vlastni inplace editor a v nem v metode BoundsChanged predat zprave EM_SETRECTNP vyssi hranicni obdelnik. System se totiz podle pouziteho fontu a toho obdelniku rozhoduje zda caret zobrazi, ci ne.
« Poslední změna: 03-03-2019, 10:24:22 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline našinec

  • Hrdina
  • ****
  • Příspěvků: 398
  • Karma: 5
Re:StringGrid - uložení hesla do buněk
« Odpověď #24 kdy: 03-03-2019, 16:23:25 »
Pro Vratika: a) To není taCenter;
                  b) Musíš zvětšit výšku buňky.
« Poslední změna: 03-03-2019, 18:01:19 od < z > »

Vratik

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #25 kdy: 04-03-2019, 05:55:37 »
Poor
Rated 1 time
Děkují.
Mužu ještě jeden dotaz?
EditMask.
http://helpcentral.componentone.com/docs/vsflexgrid8/editmaskproperty.htm

Když chcí povolit jen čisla a ,

12,2
12,44
123,12

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #26 kdy: 04-03-2019, 08:40:03 »
Poor
Rated 1 time
procedure OnlyInt(var Key: Char);
begin
  // Allow only number and special keys (arrow, tab, BS, ...)
  if not CharInSet(Key, [#0, #8, '0'..'9']) then
    Key := #0;
end;
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Vratik

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #27 kdy: 04-03-2019, 09:10:42 »
Tak je to sice pěkné, ale bych to potřeboval do procedury StringGrid1GetEditMask

Kód: Delphi [Vybrat]
  1. procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
  2.   var Value: string);
  3. begin
  4.   case ACol of
  5.     1: Value := '0000';
  6.     2: Value := '';
  7.     3: Value := '!000;1;_';
  8.     4: Value := '!99/99/00;1;_';
  9.     5: Value := '!90:00;1;_';
  10.   end;
  11. end;

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4113
  • Karma: 36
    • Verze Delphi: XE7 professional
Re:StringGrid - uložení hesla do buněk
« Odpověď #28 kdy: 04-03-2019, 10:16:53 »
Existuje funkcia TryStrToInt();
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Vratik

  • Host
Re:StringGrid - uložení hesla do buněk
« Odpověď #29 kdy: 04-03-2019, 10:30:16 »
Znám ale bych spíš řek, že vůbec nechápeš co potřebují.

Toto mi povoli napsat do 6 sloupce jen 5 čisel ale ne s desetinou čarko
Jak na to, aby mi to vzalo i tu čardu?

Kód: Delphi [Vybrat]
  1. procedure TForm1.AdvStringGridGetEditMask(Sender: TObject; ACol, ARow: Integer;
  2.   var Value: string);
  3. begin
  4.   if (ACol=6)then  Value := '00000';
  5. end;

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 924
  • Karma: 26
    • Verze Delphi: XE8, Seattle
Re:StringGrid - uložení hesla do buněk
« Odpověď #30 kdy: 04-03-2019, 14:13:08 »
Což zkusit http://www.micrel.cz/delphi/download/jbstrgrd.zip pro snazší manipulaci s hodnotami buněk?