Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi eine zelle im stringgrid mit tab überspringen? (https://www.delphipraxis.net/23209-eine-zelle-im-stringgrid-mit-tab-ueberspringen.html)

herrentor 30. Mai 2004 21:59


eine zelle im stringgrid mit tab überspringen?
 
ich hab eine zelle im stringgrid nicht zur auswahl freigegeben, hab jetzt aber das problem, dass meine tabtaste vor dieser stelle stoppt und nicht mehr weiter geht. wie kann ich einstellen, dass die zelle bei drücken der tabtaste einfach übersprungen wird, oder was gibt es für alternativen?

Code:

  begin
   CanSelect:=Not ((ACol=4) and (ARow=i));
  end;
danke im voraus.

Keldorn 30. Mai 2004 22:20

Re: eine zelle im stringgrid mit tab überspringen?
 
Hallo

-> Variable z.B. lastkey mit in den private-abschnitt der formaufnehmen
-> bei onkeydown gedrückte taste in lastkey merken, außerdem in einere weiteren Variable merken, ob die eine Zelle per mous oder tastautr ausgewählt wurde.
-> bei onselect und wenn Zelle nicht selektiert wurde, lastkey abfagen und die nächst mögliche Zelle auswählen

probiers erstmal alleine, wenn du nicht klarkommst, meld dich nochmal, irgendwo hab ich auch ein bissel code.

Mfg Frank

herrentor 30. Mai 2004 22:41

Re: eine zelle im stringgrid mit tab überspringen?
 
ehrlich gesagt, bin ich nicht so der held in delphi und kann deshalb nur teilweise was mit deiner hilfe anfangen.

Keldorn 30. Mai 2004 23:01

Re: eine zelle im stringgrid mit tab überspringen?
 
naja, wenn ich dir den code jetzt reinstelle, wird dir das aber auch nicht wirklich was bringen :roll:

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;

herrentor 30. Mai 2004 23:04

Re: eine zelle im stringgrid mit tab überspringen?
 
besten dank, ich denke das wird mir aber weiterhelfen.

herrentor 31. Mai 2004 02:21

Re: eine zelle im stringgrid mit tab überspringen?
 
super, läuft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz