Autor Beitrag
Arne
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Di 27.12.05 13:23 
Moin zusammen,

neuer Tag, neues Problem ;)

Ich habe eine Instanz eines TStringGrid, fange Mausbuttonclicks (links) in das TStringGrid ab , um dann mittels TStringGrid.Selection := myTGridRect; eine Zeile zu selektieren.
Bei meinen Tests waren immer mehr Zeilen im TStringGrid, als gerade sichtbar, d.h. der vertikale Scrollbar ist sichtbar.
Selektiere ich jetzt eine Zeile und bewege das Mausrad, erhalte ich eine Exception der Klasse "EInvalidGridOperation". Wenn ich über die Up-/Down Buttons des vert. Scrollbars gehe, ist alles in Butter.

Kann da bitte jemand Licht reinbringen? Kann ich die Exception abfangen und nix tun - muß ich was tun???

Weiterhin: wie kann ich die Größe des verschiebbaren Teils des vert. Scrollbars so anpassen, daß er nicht die standardmäßige quadratische Form hat, sondern in der vertikalen Größe in Relation zu den Zeilen im TStringGrid steht. Hat TStringGrid da eine Eigenschaft/Methode? Ich find nämlich nix.

Many Thanx, Arne
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 27.12.05 21:41 
Hallo

zeig mal bitte deinen Code. mir siond Probleme nur bekannt, wenn du die selection bereits auf einen ungültigen Wert (z.B. -1,-1,-1,-1) setzt und dann außerhalb des Grids scrollst. das kannst du dann so umgehen:
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.StringGrid1MouseWheelDown(Sender: TObject; 
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); 
begin 
  with Sender as Tstringgrid do 
    begin 
      //obere Reihe + angezeigte Reihen darf nicht größer sein, als die Gesamtreihen      
      if TopRow+Visiblerowcount<rowcount then toprow:=toprow+1 
    end
  handled:=true; 
end

procedure TForm1.StringGrid1MouseWheelUp(Sender: TObject; 
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); 
begin 
  with Sender as Tstringgrid do 
    begin 
      if TopRow>fixedrows then toprow:=toprow-1 
    end
  handled:=true; 
end;


2. Frage:
www.swissdelphicente...showcode.php?id=1052
funktioniert für meine Bergriffe aber auch nicht so wirklich, da die scrollbox nicht 100% ausgedehnt wird.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Arne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mi 28.12.05 11:49 
Hallo Frank,

danke erstmal für Deine Antwort.

Der Code zum Selektieren einer TStringGrid Zeile sieht bei mir so aus (eine FixedRow):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TFormDBMain.DBMainStringGridClick(Sender: TObject);
var
  rGrid                 : TGridCoord;
  rCursorPos            : TPoint;
  rRect                 : TGridRect;

begin
  GetCursorPos(rCursorPos);
  rCursorPos := DBMainStringGrid.ScreenToClient(rCursorPos);
  rGrid := DBMainStringGrid.MouseCoord(rCursorPos.X, rCursorPos.Y);
  if (rGrid.Y > 1and (rGrid.Y < DBMainStringGrid.RowCount) then begin
    rRect.Top                   := rGrid.Y;
    rRect.Bottom                := rGrid.Y;
    rRect.Left                  := 0;
    rRect.Right                 := DBMainStringGrid.ColCount;
    DBMainStringGrid.Selection  := rRect;
  end;
end;


Wenn der vert. Scrollbar erscheint und ich das Mausrad bewege, kracht es jedesmal.
Werde mal deinen Code einbauen...

bye, Arne
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mi 28.12.05 12:03 
Zitat:

rRect.Right := DBMainStringGrid.ColCount;

colcount ist nicht die letzte Spalte. damit setzt du die Selecttion auf einen ungültigen Bereich.

ausblenden Delphi-Quelltext
1:
rRect.Right                 := DBMainStringGrid.ColCount-1;					


ich habe es jetzt nicht probiert, aber die Umrechnerei mit den mousecursor brauchst du nicht. bei onclick ist col und row schon gesetzt und du kannst mit den Werten arebiten.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Arne Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Do 29.12.05 18:43 
Zitat:
colcount ist nicht die letzte Spalte. damit setzt du die Selecttion auf einen ungültigen Bereich.

Autsch.... da hast Du natürlich vollkommen Recht. Typischer Plus-Minus-Eins Fehler....
Funktioniert jetzt. Scrollbars noch nicht, aber jetzt weiß ich, wo ich in der Win32 API zu schauen habe. Dachte, es gäb da ein Property :cry: