Einzelnen Beitrag anzeigen

Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: eine zelle im stringgrid mit tab überspringen?

  Alt 30. Mai 2004, 23:01
naja, wenn ich dir den code jetzt reinstelle, wird dir das aber auch nicht wirklich was bringen

der code ist aus einem meiner projekte, ich mußte was rausnehmen, er sollte aber funktionieren. Es können auch mehrere Splaten/Zeilen nicht selektierbar sein, das ist egal, es wird immer die nächste zelle selektiert. Die nicht selektierbare spalte darf aber nicht die letzte spalte des grids sein ... sonst gibts ne av. und shift+tab geht auch nicht.
Delphi-Quellcode:
type
  TForm1 = class(TForm)
....
  private
    { Private-Deklarationen }
    Stgrid_key:boolean; //Zelle wurde per tastatur ausgewählt
    stgrid_lastkey:char; //letzte gedrückte Taste
...


procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //Selektion per tastatur, letzte taste merken
  Stgrid_key:=true;
  stgrid_lastkey:=char(key);
end;

procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //Selektion per mouse
  Stgrid_key:=false;
  stgrid_lastkey:=' ';
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  with (sender as Tstringgrid) do
    begin
      //spalte 4 immer überspringen
      CanSelect:=Not (ACol=4);

      //wenn Zelle durch key aktiviert wird-> nächste mögliche Zelle aktivieren, dann wird wieder selectCell aufgerufen und so weiter
      if (Stgrid_key=true) and (canselect=false) then
        begin
          if (stgrid_lastkey=chr(vk_down)) and (arow+1<rowcount) then row:=arow+1;
          if (stgrid_lastkey=chr(vk_up)) and (arow>1) then row:=arow-1;
          if (stgrid_lastkey=chr(vk_Right)) or (stgrid_lastkey=chr(vk_TAB)) then
            begin
              if acol>=colcount then
                begin
                  if arow<rowcount then
                    begin
                      col:=2;
                      row:=row+1;
                    end;
                end
               else col:=acol+1;
            end;

          if stgrid_lastkey=chr(vk_left) then
            if acol=2 then
              begin
                col:=colcount;
                if row>1 then row:=row-1;
              end
             else col:=acol-1;

          stgrid_lastkey:=' ';
        end;
    end;
end;

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat