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

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

Ширина и высота ячеек stringgrid вручную [D6, D7, XP]


timekiller ©   (2010-01-22 16:20:00) 

Подскажите такую вещь:
как изменять вручную ширину столбцов или высоту строк когда в таблице Stringgrid отсутствуют фиксированные столбцы и фиксированные строки?


timekiller   (2010-01-23 14:37:00) [1]

немного поэксперементировал:

[code]
procedure TMainFRM.StringGrid3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var glc,i:integer;
begin
 StringGrid3.Cursor:=crDefault;
 Panel2.Caption:=IntToStr(X)+','+inttostr(Y);

 //надо менять курсор на разделительных линиях в гриде
 if StringGrid3.GridLineWidth>0 then
 begin
   glc:=0; //координата gridline;
   for i:=0 to StringGrid3.ColCount-2 do
   begin
     glc:=glc+StringGrid3.ColWidths[i]+StringGrid3.GridLineWidth;
     if (X>glc-1) and (X<glc+1) then
     begin
       StringGrid3.Cursor:=crHSplit;

       //коррекция по 0 в минус и в плюс
       GridCorr:=X;

       //зафиксить тек ширину столбца его номер (глобальные перем)
       GridColW1:=StringGrid3.ColWidths[i];
       GridColW2:=StringGrid3.ColWidths[i+1];
       GridCol1:=i;
       GridCol2:=i+1;

     end;
   end;

   {на будущее для строк
   glc:=0; //координата gridline;
   for i:=0 to StringGrid3.RowCount-2 do
   begin
     glc:=glc+StringGrid3.RowHeights[i]+StringGrid3.GridLineWidth;
     if (Y>glc-1) and (Y<glc+1) then StringGrid3.Cursor:=crVSplit;
   end;
   }
 end;

 //пытаемся отобразить смещение от 0
 //сделать проверку на заползание в другие ячейки {!}
 //Panel5.Caption:=IntToStr(X-GridCorr);
 //Panel6.Caption:=IntToStr(GridColW1)+','+IntToStr(GridColW2)+','+IntToStr(GridCol1)+','+IntToStr(GridCol2)+'|'+Panel5.Caption;

 if Panel2.Color=clBlue then
 begin
   StringGrid3.ColWidths[GridCol1]:=GridColW1+(X-GridCorr);
   StringGrid3.ColWidths[GridCol2]:=GridColW2-(X-GridCorr);
 end;

 if Panel2.Color=clRed then Panel2.Color:=clBlue;
end;

[/code]

вроде работает . .. plz, поправьте если где перезаморочено?


timekiller   (2010-01-22 16:49:00) [2]

...кажется именно [3] и попробую, спасиб


Сергей М.   (2010-01-22 16:47:00) [3]


> ну мышкой двигать


Ну так у грида как и у любого контрола есть мышиные события - Down/Up/Move

Лови их и расчитывай все что тебе нужно на основании мышиных координат, передаваемых в обработчики этих событий отн-но клиентской области грида


timekiller   (2010-01-22 16:42:00) [4]

ну мышкой двигать


{RASkov}   (2010-01-22 16:35:00) [5]

> [0] timekiller ©   (22.01.10 16:20)
> как изменять вручную

что значит "в ручную"?


Наверх

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