Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Изменение ширины кнопок вместе с шириной строк в StringGrid-е [D7, Win95/98, WinXP]


Dmirty ©   (2004-07-29 13:08:00) 

Создаю я кнопочки в stringGrid-е... по две в строке... А как можно сделать, чтобы они изменялись по ширине стобца?

Создаю кнопочки я так...

with TButton.Create(StringGrid1) do
 begin
 Parent:=StringGrid1;
 BoundsRect:=StringGrid1.CellRect(6, StringGrid1.RowCount-2);
 Tag:=StringGrid1.RowCount-3; // Для того чтобы знать на какой строке она находится при ее нажатии...
 ...
 end;

with TButton.Create(StringGrid1) do
 begin
 Parent:=StringGrid1;
 BoundsRect:=StringGrid1.CellRect(7, StringGrid1.RowCount-2);
 Tag:=StringGrid1.RowCount-3;
 end;

В событии MouseUp я пишу...

var
i: integer;

if StringGrid1.Widths[0]<>.. and и т.д. then
 begin
 for i:=StringGrid1.ControlCount-1 downto 0 do
   begin
   if ((StringGrid1.Controls[i]) is TButton) then
     begin
     StringGrid1.Controls[i].BoundsRect:=StringGrid1.CellRect(6, i+1);
     end;
   end;

Но это только для одной... а как для двух?


Almaz   (2004-07-29 19:17:00) [1]


> Dmirty   (29.07.04 13:08)  
> Создаю я кнопочки в stringGrid-е... по две в строке... А
> как можно сделать, чтобы они изменялись по ширине стобца?

Попробуйте видоизменить свой код следующим образом:

Создание кнопки:

with TButton.Create(StringGrid1) do
begin
 Parent:=StringGrid1;
 BoundsRect:=StringGrid1.CellRect(6, StringGrid1.RowCount - 2);
 // Используйте свойство Tag как хранилище строки и столбца, в котором расположена кнопка.
 Tag := MakeLong(6, StringGrid1.RowCount - 2);  
end;


Обновление размеров и положения кнопок, в таком случае, будет таким:
var
 I: Integer;
begin
 for I := 0 to StringGrid1.ControlCount - 1 do
   if ((StringGrid1.Controls[i]) is TButton) then
   with StringGrid1.Controls[i] do
     BoundsRect := StringGrid1.CellRect(LoWord(Tag), HiWord(Tag));
end;


Удачи.


Dmirty   (2004-07-29 16:46:00) [2]

Я все пытаюсь что-то сделать... что-то не получается... :(


Dmirty   (2004-07-29 16:27:00) [3]

Можно, но мне так хотелось бы... как у меня только с двумя кнопками...


don-do   (2004-07-29 14:04:00) [4]

Есть предложение
Создать наследника
перекрыть процедуру CalcSizingState override
например
proc CalcSizingState
begin
inherited CalcSizingState;
//можно объявить отработчик события
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо