[Delphi] - TStringGrid- jak programowo klawiszem Enter wejśc w edycję danej komórki |
![]() ![]() |
[Delphi] - TStringGrid- jak programowo klawiszem Enter wejśc w edycję danej komórki |
pią, 29 sty 2010 - 13:23
Post
#1
|
|
|
Bywalec Grupa: Moderatorzy Postów: 75 Dołączył: czw, 26 cze 08 Nr użytkownika: 1,277 Gadu-Gadu: 6888400 |
Delphi procedure TFTabEdDokum.StringGridKeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin if not (FARow>StringGrid.RowCount-2) then begin StringGrid.Row := FARow +1; end else begin StringGrid.Row := 0; end; //StringGrid.Col := 0; //FACol; //1 StringGrid.SetFocus; end; //#13 if not (Key=#13) then begin // MemoPodglad.Text:= StringGrid.Cells[FACol, FARow]; // DokumMemo1SGridChange end; //not #13 end; Ten kod odpowiada za przeskakiwanie klawiszem Enter po edytowanych komórkach. Czy ktoś zna sposób na to żeby będąc na danej komórce po wciśnięciu Enter edytować daną komórkę a nie następną w kolumnie jak to robi w tej chwili? Merytorycznie to widzę tak: 1. Sprawdzam czy komórka jest w trybie edycji jeśli tak to EditMode:= True; jesli nie EditMode:= False;, tylko jak? 2. if EditMode then Skocz do następnej komórki (to jest zrobione/wiadome) else wejdź w edycję tylko jak? |
|
|
|
pią, 29 sty 2010 - 23:57
Post
#2
|
|
|
Nowy na forum Grupa: Użytkownicy Postów: 16 Dołączył: pon, 16 lis 09 Nr użytkownika: 1,905 |
Delphi if StringGrid.EditorMode then skocz_do_następnej_komorki else StringGrid.EditorMode := True; |
|
|
|
wto, 02 lut 2010 - 08:57
Post
#3
|
|
|
Bywalec Grupa: Moderatorzy Postów: 75 Dołączył: czw, 26 cze 08 Nr użytkownika: 1,277 Gadu-Gadu: 6888400 |
Mam coś takiego i w ogóle mi teraz nie działa przeskakiwanie jakby EdytorMode od czego innego zależał,
nie wchodzi w edycję komórki i nie przeskakuje do kolejnych komórek. Delphi procedure TFTabEdDokum.StringGridKeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin // Jesli w stanie edycji komórki to przeskakuje do nastepnej komórki if StringGrid.EditorMode then begin if not (FARow>StringGrid.RowCount-2) then begin StringGrid.Row := FARow +1; end else begin StringGrid.Row := 0; end; //StringGrid.Col := 0; //FACol; //1 StringGrid.SetFocus; end else // jesli nie jest w stanie edycji komórki StringGrid.EditorMode:= True; end; //#13 if not (Key=#13) then begin // MemoPodglad.Text:= StringGrid.Cells[FACol, FARow]; // DokumMemo1SGridChange end; //not #13 end; |
|
|
|
wto, 02 lut 2010 - 10:05
Post
#4
|
|
|
Bywalec Grupa: Moderatorzy Postów: 75 Dołączył: czw, 26 cze 08 Nr użytkownika: 1,277 Gadu-Gadu: 6888400 |
Walczę... coś wygooglowałem
Delphi procedure TFTabEdDokum.StringGridKeyPress(Sender: TObject; var Key: Char); var Msg: TMsg; begin if Key=#13 then begin if (not (goEditing in StringGrid.Options)) then StringGrid.Options:=StringGrid.Options+[goEditing]; // Jesli w stanie edycji komórki to przeskakuje do nastepnej komórki if StringGrid.EditorMode then begin if not (FARow>StringGrid.RowCount-2) then begin StringGrid.Row := FARow +1; end else begin StringGrid.Row := 0; end; //StringGrid.Col := 0; //FACol; //1 StringGrid.SetFocus; end else // jesli nie jest w stanie edycji komórki begin StringGrid.EditorMode:= True; while PeekMessage(Msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE or PM_NOYIELD) do begin end; end; end; //#13 if not (Key=#13) then begin // MemoPodglad.Text:= StringGrid.Cells[FACol, FARow]; // DokumMemo1SGridChange end; //not #13 end; Ale ta opcja działa gdy wejdę w edycję komórki. Jeśli nie edytuje to nadal "kursor stoi na zaznaczonej komórce" i ani drgnie.. szukam dalej.. |
|
|
|
wto, 02 lut 2010 - 11:41
Post
#5
|
|
|
Nowy na forum Grupa: Użytkownicy Postów: 16 Dołączył: pon, 16 lis 09 Nr użytkownika: 1,905 |
strasznie kombinujesz, ustaw goTabs w opcjach i spróbuj tego:
Delphi procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 then begin if StringGrid1.EditorMode then StringGrid1.Perform(WM_KEYDOWN,VK_TAB,0) else StringGrid1.EditorMode := True; Key := #0; end; end; działa to tak, że jeśli komórka jest edytowana to udaje wciśnięcie TAB i skacze do kolejnej komórki, jeśli nie jest edytowana to wchodzi w edycję. |
|
|
|
śro, 03 lut 2010 - 09:29
Post
#6
|
|
|
Bywalec Grupa: Moderatorzy Postów: 75 Dołączył: czw, 26 cze 08 Nr użytkownika: 1,277 Gadu-Gadu: 6888400 |
Dzięki za info, ale to rozwiązanie niestety nie pasuje (chyba że może jeszcze trzeba coś dodać),
ponieważ: - przeskakuje mi między kolumnami w poziomie, od lewej do prawej i potem następny Row, - nie wchodzi od razu w tryb edycji ( to można dopracować ) ale pierwszy warunek jest ważniejszy: a ja chciałbym mając 3 aktywne kolumny edycji, jak wstawię kursor np. na drugiej kolumnie to on mi skacze pionowo w dół od razu / zawsze wskakując w stan edycji komórki. Próbuję dalej |
|
|
|
![]() ![]() |
|
Wersja Lo-Fi | Aktualny czas: środa, 08 wrzesień 2010 - 13:40 |