title image


Smiley Re: Autom. Spaltenbreite in StringGrid
Hallo Katja,tja eine fertige Lösung für Dein Problem ist mir nicht bekannt, aber mit etwas tüffteln läßt sich das ganze schon selber basteln :-) Ich habe es mal ausprobiert und schicke Dir hier einfach mal den Sourcecode.Gruss Nils---------------------unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure MaxSpaltenbreite(Spalte: word); procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure StringGrid1DblClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end;var Form1: TForm1; aktMausPosX, aktMausPosY: Integer;implementation{$R *.DFM}procedure TForm1.MaxSpaltenbreite(Spalte: word);// Wichtig: Der Index-Wert der ersten Spalte ist 0const Abstand = 5; // Zusätzlicher Abstand in Pixel zur nächsten Spalte MinBreite = 15; // Mindestbreite einer Spalte;var Breite, MaxBreite: word; n: word;begin Canvas.Font:=StringGrid1.Font; MaxBreite:=0; for n:=0 to StringGrid1.RowCount-1 do begin Breite:=Canvas.TextWidth(StringGrid1.Cells[Spalte,n]); IF Breite > MaxBreite THEN MaxBreite:=Breite; end; IF MaxBreite + Abstand StringGrid1.ColWidths[Spalte]:=MinBreite else StringGrid1.ColWidths[Spalte]:=MaxBreite+Abstand;end;procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin aktMausPosX:=X; aktMausPosY:=Y;end;procedure TForm1.StringGrid1DblClick(Sender: TObject);{ Achtung: Diese Procedure versagt, wenn die Breite aller FIXIERTEN Spalten zusmmen breiter als das StringGrid- Fenster sind }var Spalte, X: integer; FixedColsWidth: integer;begin with StringGrid1 do begin FixedColsWidth:=0; // Breiter aller fixierten Spalten zusammen ermitteln for x:=0 to FixedCols-1 do FixedColsWidth:=FixedColsWidth+ColWidths[x]; if aktMausPosX // Der Mauszeiger befindet sich in einer fixierten Spalte Spalte:=0; x:=ColWidths[0]; while x inc(Spalte); x:=x+ColWidths[Spalte]; end; end else begin // Der Mauszeiger befindet sich rechts von den fixierten Spalten Spalte:=LeftCol; x:=FixedColsWidth+ColWidths[Spalte]; while x inc(Spalte); x:=x+ColWidths[Spalte]; end; end; if Spalte > ColCount-1 then Spalte:=ColCount-1; MaxSpaltenBreite(Spalte); end;end;end.

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: