Как изменить число фиксированных колонок в TDbGrid?

Previous  Top  Next

    
 

 

 

Code:

procedure TForm1.Button1Click(Sender: TObject);

begin

TStringGrid(DbGrid1).FixedCols := 2;

end;

 

 

©Drkb::03013

Взято из http://forum.sources.ru

 

 


Это маленькая вставка в Ваш наследник от TCustomDBGrid, которая решает данную задачу.

Code:

// DBGRIDEX.PAS

// ----------------------------------------------------------------------------

 

destructor TDbGridEx.Destroy;

begin

 

_HideColumnsValues.Free;

_HideColumns.Free;

 

inherited Destroy;

end;

 

// ----------------------------------------------------------------------------

 

constructor TDbGridEx.Create(Component: TComponent);

begin

 

inherited Create(Component);

 

FFreezeCols := ?;

 

_HideColumnsValues := TList.Create;

_HideColumns := TList.Create;

end;

 

// ----------------------------------------------------------------------------

 

procedure TDbGridEx.KeyDown(var Key: Word; Shift: TShiftState);

begin

 

if (Key = VK_LEFT) then

   ColBeforeEnter(-1);

if (Key = VK_RIGHT) then

   ColBeforeEnter(1);

 

inherited;

end;

 

// ----------------------------------------------------------------------------

 

procedure TDbGridEx.SetFreezeColor(AColor: TColor);

begin

 

InvalidateRow(0);

end;

 

// ----------------------------------------------------------------------------

 

procedure TDbGridEx.SetFreezeCols(AFreezeCols: Integer);

begin

 

FFreezeCols := AFreezeCols;

InvalidateRow(0);

end;

 

// ----------------------------------------------------------------------------

 

procedure TDbGridEx.ColEnter;

begin

 

ColBeforeEnter(0);

 

if Assigned(OnColEnter) then

   OnColEnter(Self);

end;

 

// ----------------------------------------------------------------------------

 

procedure TDbGridEx.ColBeforeEnter(ADelta: Integer);

var

 

nIndex: Integer;

 

function ReadWidth: Integer;

var

 

   i: Integer;

 

begin

 

   i := _HideColumns.IndexOf(Columns[nIndex]);

 

   if i = -1 then

     result := 120

   else

     result := Integer(_HideColumnsValues[i]);

end;

 

procedure SaveWidth;

var

 

   i: Integer;

 

begin

 

   i := _HideColumns.IndexOf(Columns[nIndex]);

   if i <> -1 then

   begin

     _HideColumnsValues[i] := Pointer(Columns[nIndex].Width);

   end

   else

   begin

     _HideColumns.Add(Columns[nIndex]);

     _HideColumnsValues.Add(Pointer(Columns[nIndex].Width));

   end;

end;

 

begin

 

for nIndex := 0 to Columns.Count - 1 do

begin

   if (Columns[nIndex].Width = 0) then

   begin

     if (nIndex + 1 <= FreezeCols) or (nIndex >= SelectedIndex + ADelta) then

       Columns[nIndex].Width := ReadWidth;

   end

   else

   begin

     SaveWidth;

     if (nIndex + 1 > FreezeCols) and

       (nIndex < SelectedIndex + ADelta) and

       (nIndex + 1 < Columns.Count) and

       (FreezeCols > 0) then

       Columns[nIndex].Width := 0;

   end;

end;

end;

 

 

 

 

 

©Drkb::03014

       

Взято с http://delphiworld.narod.ru