Текущий архив: 2007.10.14;
Скачать: CL | DM;
Вниз
Размеры колонок в StringGrid Найти похожие ветки
← →
dimaL (2007-07-31 02:51) [0]Необходимо, чтобц размеры колонок в StGrid увеличивались и уменьшались вместе с размерами форма. Написал такой код:
(OnResize)w:= StringGrid1.Width; //Ширина таблицы до изменения
StringGrid1.Width:=Form1.Width-40;
l:=Round((StringGrid1.Width-w)/2);// Ширину разбиваем на 2 колонки
StringGrid1.Height:=Form1.Height-110;
//Наращиваем столбцы таблицы
StringGrid1.ColWidths[1]:=StringGrid1.ColWidths[1]+l;
StringGrid1.ColWidths[2]:=StringGrid1.ColWidths[2]+l;
r:= StringGrid1.Width- StringGrid1.ColWidths[0]-StringGrid1.ColWidths[1]
-StringGrid1.ColWidths[2]-24;
if l>=0 then
StringGrid1.ColWidths[1]:=StringGrid1.ColWidths[1]+r
else
StringGrid1.ColWidths[1]:=StringGrid1.ColWidths[1]-r;
Значительно увеличивается лишь одна из колонок. При уменьшение формы колонки не получают размеров, как до увеличения. Может у кого-нибудь есть более профессиональный вариант. Заранее спасибо!
← →
{RASkov} © (2007-07-31 03:30) [1]> [0] dimaL (31.07.07 02:51)
Не совсем понятно, но..... попробуй вот так:procedure TForm1.FormResize(Sender: TObject);
var w, r: Integer;
begin
StringGrid1.Width:=ClientWidth-StringGrid1.Left*2; //Выравниваем по центру горизонтали
StringGrid1.Height:=ClientHeight-StringGrid1.Top*2; //.... вертикали
w:=(StringGrid1.Width-StringGrid1.ColWidths[0]-StringGrid1.GridLineWidth*StringGrid1.ColCount-2) div (StringGrid1.ColCount-1);
for r:= 1 to StringGrid1.ColCount-1 do StringGrid1.ColWidths[r]:=W;
end;
← →
dimaL (2007-07-31 05:51) [2]
> {RASkov} ©
Спасибо! Работает!
← →
dimaL (2007-07-31 05:59) [3]
> > {RASkov} ©
Такой момент: В вашем коде все колонки получают одинаковую ширину. А мне необходимо увеличивать/уменьшать ширину колонок пропорционально начальному размеру
← →
Elen © (2007-07-31 08:13) [4]
> А мне необходимо увеличивать/уменьшать ширину колонок пропорционально
> начальному размеру
А так пойдет? :unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var a,b:integer;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormResize(Sender: TObject);
var i:integer;
begin
if b<>0 then begin
//********* FOR ******************
for i :=0 to StringGrid1.ColCount-1 do
begin
StringGrid1.ColWidths[i]:=StringGrid1.ColWidths[i]-(b-Width);
end;
//******* END FOR ****************{}
end;
if a<>0 then begin
//********* FOR ******************
for i :=0 to StringGrid1.RowCount-1 do
begin
StringGrid1.RowHeights[i]:=StringGrid1.RowHeights[i]-(a-Height);
end;
//******* END FOR ****************{}
end;
a:=Height;
b:=Width;
end;
end.
← →
dimaL (2007-07-31 09:13) [5]
> Elen ©
Не работает. Суммарная ширина колонок должна быть равна ширине Грида.
← →
ЮЮ © (2007-07-31 09:44) [6]> А мне необходимо увеличивать/уменьшать ширину колонок пропорционально
> начальному размеру
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i, prc: integer;
begin
// запоминаем % соотношение ширины столбца в гриде
for i := 0 to StringGrid1.ColCount - 1 do begin
prc := Round(StringGrid1.ColWidths[i] / StringGrid1.ClientWidth * 100);
StringGrid1.Objects[i, 0] := TObject(prc);
end;
end;
procedure TForm1.FormResize(Sender: TObject);
var
i, w: integer;
begin
// устанавливаем ширину столбца в соответствии с его шириной в дизайне
w := StringGrid1.ClientWidth;
for i := 0 to StringGrid1.ColCount - 2 do
StringGrid1.ColWidths[i] :=
Round(Integer(StringGrid1.Objects[i, 0]) / 100 * w);
w := 0;
for i := 0 to StringGrid1.ColCount - 2 do
inc(w, StringGrid1.ColWidths[i] + StringGrid1.GridLineWidth);
StringGrid1.ColWidths[StringGrid1.ColCount - 1] :=
StringGrid1.ClientWidth - w - StringGrid1.GridLineWidth
end;
end.
Страницы: 1 вся ветка
Текущий архив: 2007.10.14;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.036 c