изменять размер в рантайме

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

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

Ответить
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

изменять размер в рантайме

Сообщение Attid »

в общем хочу у кнопки \ панельки в рантайме менять размер мышкой также как в дизайн-тайме как это сделать ?

помнися как-то просто должно быть.
Аватара пользователя
Alexx2000
постоялец
Сообщения: 491
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

Не знаю может можно проще, но я делал через обработку событий
OnMouseDown
OnMouseMove
OnMouseUp
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

я заюзал
OnMouseMove
OnMouseLeave

код делал для примера знакомому, надо будет в понедельник запостить для потомков.

просто думал может можно вызвать свойства которые у компонентов в дизайне, чтоб появились квадратики за которые мышь цеплятся будет.
Аватара пользователя
Slavikk
постоялец
Сообщения: 208
Зарегистрирован: 15.01.2007 21:34:52
Откуда: Из лесов...
Контактная информация:

Сообщение Slavikk »

Потомки уже ждут :D
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Код: Выделить всё

procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
//  TWinControl(Sender).Caption := 'x= '+IntToStr(x)+ ' y = '+ IntToStr(Y) ;
  if (x > TWinControl(Sender).Width - 10) and (y > TWinControl(Sender).Height - 10) then
    TWinControl(Sender).Cursor := crSizeNWSE;

  if ((TWinControl(Sender).Cursor = crSizeNWSE) and (ssLeft in Shift)) then
  begin
       TWinControl(Sender).Width := X;
       TWinControl(Sender).Height := Y;
  end;
end;

procedure TForm1.MyMouseLeave(Sender: TObject);
begin
  TWinControl(Sender).Cursor := crDefault;
end;


код работает на кнопке\панельке\мемо
больше не проверял =)

по хорошему надо маус ап\доун тоже обрабатывать, но и так все работает =)
Аватара пользователя
Slavikk
постоялец
Сообщения: 208
Зарегистрирован: 15.01.2007 21:34:52
Откуда: Из лесов...
Контактная информация:

Сообщение Slavikk »

Спасибо
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Если написать так

Код: Выделить всё

  if (x > TWinControl(Sender).Width - 10) and (y > TWinControl(Sender).Height - 10) then
    TWinControl(Sender).Cursor := crSizeNWSE
  else
    TWinControl(Sender).Cursor := crDefault;

, то OnMouseLeave не нужен.

Кстати, немного смущает TWinControl. Нормально в плане кроссплатформенности?
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

v-t-l
а ты пробывал ? я перед тем как OnMouseLeave заюзать пробывал.
если быстро двигать мышей глючит бесподобно.
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Пробовал. Заметил.
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Attid
http://angusj.com/delphi/sizectrl.zip
Может удастся адаптировать.
Ответить