StringGrid и FormResize

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: StringGrid и FormResize

Сообщение Mushroomer » 21.12.2017 12:43:24

vitaly_l писал(а): вот эту "хрень"
я убрал.
Всем большое спасибо, тема исчерпана.
Mushroomer
новенький
 
Сообщения: 20
Зарегистрирован: 04.12.2017 15:07:39

Re: StringGrid и FormResize

Сообщение vitaly_l » 21.12.2017 12:44:44

Mushroomer писал(а):Всем большое спасибо, тема исчерпана.

И кстати более логично и разумно сделать вот так:
Код: Выделить всё
procedure TForm1.TabSheet3Show(Sender: TObject);
begin
   StringGrid1.ColWidths[2] := StringGrid1.ClientWidth - StringGrid1.ColWidths[0] - StringGrid1.ColWidths[1];
end;     

procedure TForm1.FormResize(Sender:TObject);
begin
   TabSheet3Show(nil);
end;

потому что, в FormResize - могут понадобится и другие действия несвязанные с TabSheet3Show.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: StringGrid и FormResize

Сообщение alexs » 21.12.2017 12:46:41

Mushroomer
Для вашей ситуации вообще код писать не надо
В стрингриде есть свойство StringGrid1.AutoFillColumns
Его включаем
У колонок грида есть свойство .SizePriority
Для тех кто не должен ресайзиться ставим 0
Для всех прочих - 1
Всё.
Кстати это же поведение и DBGrid-а есть.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: StringGrid и FormResize

Сообщение vitaly_l » 21.12.2017 13:21:45

alexs писал(а):код писать не надо

по моему, у него нужно делать на onShow только:
Код: Выделить всё
StringGrid1.Refresh;

т.к. при неактивном TabSheet не посылается команда на AutoFillColumns.
И если делать StringGrid1.Refresh и/или StringGrid1.Repaint,
то вот это будет лишней строкой: StringGrid1.ColWidths[2] := StringGrid1.ClientWidth - StringGrid1.ColWidths[0] - StringGrid1.ColWidths[1];
при включенном AutoFillColumns

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: StringGrid и FormResize

Сообщение Mushroomer » 21.12.2017 13:27:42

alexs писал(а):alexs » 21.12.2017 13:46:41

Большое спасибо!

vitaly_l писал(а):на onShow StringGrid1.Refresh;
- это первое, что я пробовал.
Mushroomer
новенький
 
Сообщения: 20
Зарегистрирован: 04.12.2017 15:07:39

Re: StringGrid и FormResize

Сообщение vitaly_l » 21.12.2017 13:37:20

Mushroomer писал(а):это первое, что я пробовал.

Вы технически не могли это пробовать "первым", т.к. onShow у Вас не работало (как минимум - пол топика, не работало).
Я Вам об этом пишу, т.к. судя по ответу, Вы, до сих пор не поняли где именно нужно указать StringGrid1.Repaint.
Впрочем пофигу.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: StringGrid и FormResize

Сообщение Mushroomer » 21.12.2017 14:03:39

vitaly_l писал(а):Вы, до сих пор не поняли где именно нужно указать StringGrid1.Repaint.

Вы должны делать скидку на то, что не все люди умны так как Вы.
StringGrid1.Repaint я прописывал здесь.
Код: Выделить всё
procedure TForm1.TabSheet4Show(Sender: TObject);
begin
  StringGrid1.Repaint;
end;
Mushroomer
новенький
 
Сообщения: 20
Зарегистрирован: 04.12.2017 15:07:39

Re: StringGrid и FormResize

Сообщение vitaly_l » 21.12.2017 14:11:41

Mushroomer писал(а):прописывал здесь

Так Вы же говорите, что в Вашей версии Лазаруса - именно эта функция (TForm1.TabSheet4Show) - не работает.
Соответственно и StringGrid1.Repaint; - не запускалось.
Mushroomer писал(а):Вы должны делать скидку

хрена лысого! Никаких скидок! Сегодня сделаешь программистам скидку, а завтра начнут падать самолёты и взрываться АЭС. Вон слышали, полетели все Фискальные накопители и страна понесла мультитриллиардный ущерб. А кто виноват? Правильно! Виноваты, программисты, которым делали скидку. Так что, никаких скидок, раз уж взялись писать крутые программы, будь-те любезны понимать почему они не работают, и осознавать от чего самолёты падают.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: StringGrid и FormResize

Сообщение alexs » 21.12.2017 14:15:23

vitaly_l писал(а):т.к. при неактивном TabSheet не посылается команда на AutoFillColumns.

Неправда ваша
Сейчас проверил GTK/WIN32 - всё работает.
Lazarus 1.9.0 r56811M FPC 3.1.1 x86_64-linux-gtk2
Lazarus 1.9.0 r56811M FPC 3.1.1 i386-win32-win32/win64
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: StringGrid и FormResize

Сообщение vitaly_l » 21.12.2017 14:25:17

alexs писал(а):всё работает

"сдаюсь". Хотя и не понимаю: Зачем программе, отправлять hidden элементу, команду на refresh|repaint + AutoFillColumns?
Хотя, я всё ещё решаю задачу ТС с onShow в TabSheet... а у Вас скорее всего, работает onShow для StringGrid, так что 100% сдаюсь, т.к. 100% должно работать.
Последний раз редактировалось vitaly_l 21.12.2017 14:39:12, всего редактировалось 2 раз(а).
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: StringGrid и FormResize

Сообщение alexs » 21.12.2017 14:38:44

Может потому что ресайз<>отрисовка?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: StringGrid и FormResize

Сообщение vitaly_l » 21.12.2017 14:40:53

alexs писал(а):ресайз<>отрисовка

Первое разве не вызывает второе. Нет?
А как же оно ресайзится без перерисовки?
Что опять самолёты падают и взрываются АЭС?

Или оно вначале ресайзится но не перерисовывается?
Так я поэтому и писал, что нужно сделать repaint.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: StringGrid и FormResize

Сообщение alexs » 21.12.2017 14:50:53

ресайз не требует прорисовки скрытого
но скрытые элементы должны пересчитать свои координаты для правильной отрисовки по требованию.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: StringGrid и FormResize

Сообщение vitaly_l » 21.12.2017 15:04:18

alexs писал(а):скрытые элементы должны пересчитать свои координаты для правильной отрисовки по требованию

Дык я об этом и говорил, пол топика, предлагая сделать repaint.

И очень поддерживаю вот этот вариант, т.к. он в 100 раз более разумный, нежели городить огород:
alexs писал(а):В стрингриде есть свойство StringGrid1.AutoFillColumns
Его включаем
У колонок грида есть свойство .SizePriority
Для тех кто не должен ресайзиться ставим 0
Для всех прочих - 1
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: StringGrid и FormResize

Сообщение alexs » 21.12.2017 15:40:55

3 раза мышкой нажать, чтобы установить в инспекторе объектов значения свойств - это огород? А писать костыли - это не огород?
Просто зачем писать код, который дублирует штатный функционал?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

Рейтинг@Mail.ru