Autor Beitrag
Barzi
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.10.07 19:53 
Hallo,
Ich habe mal wieder ein Problem:
Ich will per TAB-Taste eine Zelle im TStringGrid weiter springen. Dazu habe ich folgende Prozedur geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.GotoNextCell;

begin
if StringGrid1.Col < Grid.ColCount - 2 then
    begin
      StringGrid1.Col:=StringGrid1.Col+1;
    end
  else
    begin
      if StringGrid1.Row < Grid.RowCount - 2 then
        begin
        StringGrid1.Row:=StringGrid1.Row+1;
        StringGrid1.Col := 1;
        end
      else
        begin
          StringGrid1.Col:=1;
          StringGrid1.Row:=1;
        end;
    end;
end;


Die Prozedur funktioniert, wenn ich sie über das OnKeyDown-Ereignis aufrufe auch
wunderbar:
ausblenden Delphi-Quelltext
1:
if Key = 13 then GotoNextCell(StringGrid1);					

Das eigentliche Problem tritt auf wenn ich Key von der Enter-Taste auf die TAB-Taste ändere. Dann wird nämlich beim Drücken der TAB-Taste eine ComboBox makiert, die sich ebenfalls auf dem Formular befindet.

Hat jemand eine Ahnung, wie man das verhindern kann? Ist es vielleicht das falsche Ereignis, um die Prozedur aufzurufen?

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: Mi 10.10.07 20:00 
Hi,

warum so kompliziert?

Schau mal beim OI im Stringgrid nach "Options", und da nach "goTabs"... und Dir wird geholfen :wink:

bye bflegel

_________________
I know all the jokes about my name
Barzi
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.10.07 20:16 
Das ist schon mal ein guter Tipp 8)
Daraus folgt leider aber ein weiteres Problem:
Ich habe links und rechts zwei Spalten in den der Courser nicht springen soll.
Sie sind uneditierbar.
Barzi
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 10.10.07 20:37 
Ich habe eine Lösung gefunden. Ich habe die Prozedur jetzt so umgeschrieben, dass StringGrid1.Col verringert wird, sobald ein Feld der linken oder rechten Spalte markiert wird.

Vielen Dank für deine Hilfe, bflegel!
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 10.10.07 20:54 
Hallo,

dafür gibt es das Ereignis OnSelectCell und die Prozedurvariable CanSelect.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: Mi 10.10.07 20:54 
Bitte sehr, gern geschehen.

Du kannst aber auch im Ereignis "OnSelectSell" abfragen:

ausblenden Delphi-Quelltext
1:
2:
if acol := 0 then canselect := false;    bzw
if acol := <letzte spalte> then canselect := false;


Dann können die entsprechenden Zeilen weder mit der Maus noch mit der Tastatur erreicht werden, aber über SG.Cells[x,y] kann immer noch reingeschrieben werden!

Einen schönen Abend wünsche ich.

Bye bflegel

//edit: grmpf... zu spät :cry:

_________________
I know all the jokes about my name