Entwickler-Ecke

Datenbanken - Grid Spalten, nach größtem Inhalt, automatisch anpassen .?!


LuckyStrike4life - Di 01.07.03 08:51
Titel: Grid Spalten, nach größtem Inhalt, automatisch anpassen .?!
Morgen,

gibt es eine Funktion, beim Grid, die es ermöglicht die Spaltengröße nicht immer nach dem größtem theoretischen Wert anzeigen zu lassen, sondern nach dem tatsächlich größtem Wert?

Da die User später gezwungen sein werden sich vorläufig über den Grid zu informieren, wäre das schon sehr schön wenn mir jemand helfen könnte.

Gruß,

Mardin.


Keldorn - Di 01.07.03 10:33

mit den DB-Sachen arbeite ich nicht, vielleicht gibts da auch was anderes.
Im normalen Grid würde ich die Spalte durchgehen und mit [b]Textwidth[b] die Breite eines Eintrages ermitteln.

in etwa so (ungetestet direkt ins Forum geklimpert):


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var maxbreite,i:integer;

begin 
  maxbreite:=0;
  for i:=0 to stringgrid1.rowcount-1 do
       maxbreite:=max(maxbreite,stringgrid1.canvas.textwidth(Stringgrid1.cells[1,i]);
   stringgrid1.colwidths[1]:=maxbreite+4;
end;


edit: ich glaube im swissdelphicenter dazu mal einen Tip gesehen zu haben, gugg auch mal dort nach

mfg Frank


LuckyStrike4life - Mi 02.07.03 08:39

Morgen,

wofür steht stringgrid1 in deinem Quelltext? Delphi meint:

Zitat:
[Fehler] DB4realpas.pas(225) : Undefinierter Bezeichner: 'stringgrid'


Auch wenn ich dafür den Namen meines Grids einsetze, meint Delphi das gleiche.

Hm.. wo mag der Fehler liegen?


Keldorn - Mi 02.07.03 09:13

LuckyStrike4life hat folgendes geschrieben:
Morgen,

wofür steht stringgrid1 in deinem Quelltext? Delphi meint:

Auch wenn ich dafür den Namen meines Grids einsetze, meint Delphi das gleiche.



Für dein stringgrid, das du verwendest, es muß der name deines Grids sein. Ich nutze keine DB-sachen, deswegen für das normale Stringgrid.
Wo hast du den Code hingenommen? du mußt die Proc in den private oder public teil der form aufnehmen oder Form1.stringgrid1

mfg Frank


LuckyStrike4life - Mi 02.07.03 10:32

Das Stringgrind1 wohl der Name des normalen Grids ist wahr mir schon klar, deswegen hatte ich ihn auch mit meinem richtigem ausgetauscht.

Leider brachte es auch nichts den Code in den public Bereich zu schreiben ... .


Keldorn - Mi 02.07.03 10:46


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids,math;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    Procedure OptimaleSpaltenbreite(Stringgrid:Tstringgrid;Spaltennr:integer);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

Procedure TForm1.OptimaleSpaltenbreite(Stringgrid:Tstringgrid;Spaltennr:integer);
var maxbreite,i:integer;

begin
  maxbreite:=0;
  for i:=0 to stringgrid.rowcount-1 do
    maxbreite:=max(maxbreite,stringgrid.canvas.textwidth(Stringgrid.cells[Spaltennr,i]));
  stringgrid.colwidths[Spaltennr]:=maxbreite+4;
end;

procedure TForm1.FormCreate(Sender: TObject);
Var i:integer;
begin
  Stringgrid1.Cells[1,0] := 'fdsfsdfsd f ';
  Stringgrid1.Cells[1,1] := 'fdsfsd ';
  Stringgrid1.Cells[1,2] := 'fdsfsdfgdffsd f ';
  Stringgrid1.Cells[1,3] := 'fdsfsdfsdfdgdgd  f ';
  Stringgrid1.Cells[1,4] := 'fdsfsdfgfgdgdfg sd f ';
  OptimaleSpaltenbreite(StringGrid1,1);
end;

end.

funktioniert