Witaj Gościu ( Zaloguj | Rejestruj )

 
Reply to this topicStart new topic
[Delphi] - TStringGrid- jak programowo klawiszem Enter wejśc w edycję danej komórki
Integer
post 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?
Go to the top of the page
 
+Quote Post
emes30
post 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;
Go to the top of the page
 
+Quote Post
Integer
post 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;
 
Go to the top of the page
 
+Quote Post
Integer
post 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..
Go to the top of the page
 
+Quote Post
emes30
post 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ę.
Go to the top of the page
 
+Quote Post
Integer
post ś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
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: środa, 08 wrzesień 2010 - 13:40