Autor Beitrag
mr_data
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win XP, Win2K
D5, D6 Pers.
BeitragVerfasst: Sa 13.09.03 17:37 
Hallo,
ich habe ein Stringgrid mit editierbaren Zellen, also
Options GoEditing und GoAlwaysShowEditor TRUE.

Wenn eine Zelle neu ausgewählt wird, wirken die Tasten Pfeil-links bzw. Pfeil-rechts so, dass die nächste bzw. vorige Zelle ausgewählt wird. Ich möchte aber , dass die Tasten Pfeil-links bzw. Pfeil-rechts nur innerhalb der Zelle positionieren.

Wie kann ich das bewirken ?
D5, Win2K

Anmerkung: auf meinem D6/Win98-System ist das Verhalten etwas besser, Pfeil-links geht da (wenn das Caret am Ende der Zelle steht) innerhalb der Zelle zurück - wie ich es haben will. Aber ich möchte, dass man mit Pfeil-links und -rechts die Zelle gar nicht verlassen kann!

Vielen Dank schon mal!

_________________
"Sehnst du dich nach den Tagen zurück, wo Männer noch Männer waren und ihre Gerätetreiber selbst schrieben?" (Linux-Freigabe 0.02)
------------------------------------
Tschüß Data
mr_data Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win XP, Win2K
D5, D6 Pers.
BeitragVerfasst: Di 16.09.03 10:28 
Ist inzwischen gelöst (Dank an Frank!)

Ich skizziere mal die Lösung, man sollte dazu wissen, dass die Ereignisse beim Stringgrid in folgender Reihenfolge ausgelöst werden:

OnKeyDown oder On MouseDown
OnSelect (danach wird die neue Zelle angesteuert, wenn CANSELECT=TRUE)
OnClick

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
type
  TStringgridHack = class(Tcustomgrid)
    public
    property InplaceEditor;
    end;
...
procedure TForm1.PGridKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   lastkey := key;
end;
procedure TForm1.PgridMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  lastkey := 0;
end;
procedure TForm1.PGridSelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
  if (lastkey = 37) or (lastkey = 39) then // Pfeil links+rechts blockieren
     begin
     CanSelect :=FALSE;
     Exit
     end;
  CanSelect := TRUE;
  ...
procedure TForm1.PGrid2Click(Sender: TObject);
Var inplaceEdit:TInplaceEdit;
begin
  if lastkey = 37 then   // Pfeil Links
  begin
    inplaceEdit := TStringgridHack(StringGrid2).InplaceEditor;
    //wenn alles ausgewählt dann deselectieren
    if inplaceEdit.SelLength=length(inplaceEdit.Text) then
       inplaceEdit.Deselect;
  end;
  lastkey := 0;
  ...

_________________
"Sehnst du dich nach den Tagen zurück, wo Männer noch Männer waren und ihre Gerätetreiber selbst schrieben?" (Linux-Freigabe 0.02)
------------------------------------
Tschüß Data