Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Di 12.04.16 22:03 
Ich habe ein StringGrid-Objekt, bei dem der Anwender per ButtonClick eine Zeile nach oben bzw. nach unten verschieben kann. Geschieht dies, dann ist der Cursor nicht mehr sichtbar. Wie kann ich den Cursor wieder sichtbar machen und auf eine Celle[col,row] setzen?
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mi 13.04.16 00:30 
user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich den Cursor wieder sichtbar machen und auf eine Celle[col,row] setzen?

Man kann bei einem StringGrid Row, Col, LeftCol, TopRow abfragen und ihnen neue Werte zuweisen.
Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
  StringGrid1.Col := StringGrid1.Col + 2;
  StringGrid1.Row := StringGrid1.Row + 3;
  Label1.Caption := IntToStr(StringGrid1.LeftCol);
  Label2.Caption := IntToStr(StringGrid1.TopRow);
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mi 13.04.16 23:48 
Danke, mit den ersten zwei Anweisungen setzt man den Focus tatsächlich auf eine bestimmte Zelle. Allerdings wird hierdurch der Cursor noch nicht sichtbar. Aber auch dieses "Problem" habe ich inzwischen gefunden/gelöst. Verschiebt man die Zeilen mittels einer Procedure-ButtonClick, so wechselt der Focus natürlich zum Button. Daher muss am Ende noch der Aufruf StringGrid1.SetFocus stehen.
Nachstehend ein funktionsfähiges Beispiel

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Procedure TForm2.ZeileAbClick(Sender: TObject);
{StringGrid-Zeile um +1 abwärts}
Var i,j : integer;
    s : string;
begin with StringGrid1 do begin
 if ((Row>-1and (Row<RowCount-1)) then
  begin //Zeile abwärts schieben
    i:=row+1;
    for j:= FixedCols to ColCount-1 do
    begin
      s:=Cells[j,row];
      Cells[j,row]:=Cells[j,i];
      Cells[j,i]:=s;
    end;
    Row := Row + 1// Cursor auf verschobene Zeile setzen
  end;
  SetFocus;
endend;