Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1190484060
Временный_Чайник
2007-09-22 22:01
2007.10.14
как организовать поиск по любому из введённых слов


2-1189774498
tytus
2007-09-14 16:54
2007.10.14
Есть ли альтернатива GetHostByAddr ???


2-1190271390
-=Germe$=-
2007-09-20 10:56
2007.10.14
Вопрос по ДЛЛ


2-1189961373
aha
2007-09-16 20:49
2007.10.14
Можно ли изменить цвет шрифта некоторых ячеек


15-1189770684
NeedForHelpAlways
2007-09-14 15:51
2007.10.14
Как сделать словарь терминов?