Autor Beitrag
MisterBum
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107



BeitragVerfasst: So 03.04.05 20:07 
Hallo,
habe eine Access-Tabelle die in einem DBGrid ausgegeben wird. Damit die Spalten an der längsten ausgerichtet werden, folgender Code. Hat alles super funktioniert bis ich nun neue Felder hinzugefügt habe. Jetzt stürzt er nach meheren Durchläufen der makierten For-Schleife mit einer Zugriffsverletzung ab. Woran könnte das liegen? Jemand ne Idee???

ausblenden volle Höhe 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:
procedure SetGridColumnWidths(Grid: Tdbgrid);
const
  DEFBORDER = 10;
var
  temp, n: Integer;
  lmax: array[0..30of Integer;
begin
    with Grid do
    begin
      DataSource.DataSet.DisableControls;
      Canvas.Font := Font;
      for n := 0 to Columns.Count - 1 do
        lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER;       <------------- Zugriffsverletzung
      grid.DataSource.DataSet.First;
      if grid.DataSource.DataSet.RecordCount > 1000 then
      begin
        Grid.DataSource.DataSet.EnableControls;
        exit;
      end;
      while not grid.DataSource.DataSet.EOF do
      begin
        for n := 0 to Columns.Count - 1 do
        begin
        //if columns[n].visible then begin
          temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER;
          if temp > lmax[n] then lmax[n] := temp;
        //end; { if }
        end{for}
       grid.DataSource.DataSet.Next;
      end{ while }
      grid.DataSource.DataSet.First;
      for n := 0 to Columns.Count - 1 do
        if lmax[n] > 0 then
          Columns[n].Width := lmax[n];
      Grid.DataSource.DataSet.EnableControls;
    end{ With }
end{SetGridColumnWidths  }


Moderiert von user profile iconAXMD: Delphi-Tags hinzugefügt.
Martin77
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 282

XP Prof
D6 Prof, D7 Personal, D7 Enterprise, D8 personal
BeitragVerfasst: So 03.04.05 21:16 
Lass mich raten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
lmax: array[0..30of Integer;
begin
....
for n := 0 to Columns.Count - 1 do
lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER; <------------- Zugriffsverletzung
....


Du hast jetzt mehr als 31 Felder? ;)

Erweitere doch das Array


martin
MisterBum Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 107



BeitragVerfasst: Mo 04.04.05 10:24 
Oh man bin ich do....
Vielen Dank!