Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2011, 21:03   #1
Handy
Пользователь
 
Регистрация: 04.01.2010
Сообщений: 16
По умолчанию Вопрос по компоненту memo

Подскажите пожалуйста, как в компоненте memo можно сделать так, что бы пользователь мог сам менять размеры окна memo и двигать его, или хотя бы двигать.
Handy вне форума Ответить с цитированием
Старый 15.01.2011, 21:23   #2
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

У каждого визуального компонента есть свойства Left, Top, Height, Width...
asmodey1 вне форума Ответить с цитированием
Старый 15.01.2011, 21:28   #3
Handy
Пользователь
 
Регистрация: 04.01.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от asmodey1 Посмотреть сообщение
У каждого визуального компонента есть свойства Left, Top, Height, Width...
Я это понимаю, но как сделать так, что бы можно было менять расположение компонента в форме? То что я сам его могу тягать - я понимаю)))
Handy вне форума Ответить с цитированием
Старый 15.01.2011, 21:37   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

пример из DelphiWorld:

Цитата:

Как перемещать компонент во время работы программы
Автор: Олег Кулабухов

Нижеприведенный пример показывает как перемещать компонент при перетаскивании его нажатой левой кнопкой мыши при нажатом Ctrl.
Код:
rocedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
{$IFNDEF WIN32}
var
  pt: TPoint;
{$ENDIF}
begin
  if ssCtrl in Shift then
  begin
    ReleaseCapture;
    SendMessage(Memo1.Handle, WM_SYSCOMMAND, 61458, 0);
{$IFNDEF WIN32}
    GetCursorPos(pt);
    SendMessage(Button1.Handle,
      WM_LBUTTONUP,
      MK_CONTROL,
      Longint(pt));
{$ENDIF}
  end;
end;
p.s. разумеется, если код будет эксплуатироваться только под Windows - тогда выкинуть всё что в {$IFNDEF WIN32}... {$ENDIF}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.01.2011, 21:46   #5
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Handy Посмотреть сообщение
Я это понимаю, но как сделать так, что бы можно было менять расположение компонента в форме? То что я сам его могу тягать - я понимаю)))
Практически для любого компонента на форме (на примере Button2) - просто цепляем левой мышкой и таскаем:

Код:
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  Button2.perform(WM_SysCommand,SC_DragMove,0);
end;
Изменять размер любого оконного компонента можно, поколдовав немного над его стилями. Например, если для Edit1 установить стили :
Код:
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or WS_THICKFRAME);
SetWindowLong(Edit1.Handle, GWL_EXSTYLE, GetWindowLong(Edit1.Handle, GWL_EXSTYLE) and not WS_EX_CLIENTEDGE);
то можно изменять его размеры во время работы программы (run-time).
Полный пример :
Код:
procedure TForm1.Button11Click(Sender: TObject); // включаем режим 
begin
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or WS_THICKFRAME);
SetWindowLong(Edit1.Handle, GWL_EXSTYLE, GetWindowLong(Edit1.Handle, GWL_EXSTYLE) and not WS_EX_CLIENTEDGE);
end;

procedure TForm1.Button12Click(Sender: TObject); // отключаем режим
begin
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) and not WS_THICKFRAME);
SetWindowLong(Edit1.Handle, GWL_EXSTYLE, GetWindowLong(Edit1.Handle, GWL_EXSTYLE) and WS_EX_CLIENTEDGE);
end;
Можете привязать эти обработчики не к кнопкам, а к сочетаниям : нажатие кнопки мышки + CTRL, например - для включения режима и + ALT - для выключения...

Последний раз редактировалось asmodey1; 16.01.2011 в 02:59.
asmodey1 вне форума Ответить с цитированием
Старый 17.06.2011, 00:27   #6
Handy
Пользователь
 
Регистрация: 04.01.2010
Сообщений: 16
По умолчанию

С memo разобрался сразу и все работало. А вот с groupbox не хочет. В чем может быть проблема?
В описании:
Код:
procedure GroupBox35MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
сам код:
Код:
procedure TForm2.GroupBox35MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  GroupBox35.perform(WM_SysCommand,SC_DragMove,0);
end;
Handy вне форума Ответить с цитированием
Старый 17.06.2011, 00:50   #7
Handy
Пользователь
 
Регистрация: 04.01.2010
Сообщений: 16
По умолчанию

А все, понял. Надо было просто в маусдаун загнать процедуру.
Handy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по компоненту DateTimePicker Dux Компоненты Delphi 5 18.09.2010 23:02
обратиться к компоненту Memo, на активной вкладке PageControl dr.Chas Общие вопросы Delphi 11 29.04.2010 17:10
Вопрос по компоненту TDateTimePicker SANIOK_AV Общие вопросы Delphi 5 05.06.2009 13:47
Вопрос по компоненту StringGrid Vla9240 Помощь студентам 2 14.05.2009 22:36
Вопрос по компоненту MonthCalendar AIst Компоненты Delphi 1 02.04.2009 13:25