Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Delphi

zxvzxvzxvc zxcvvcxzxcvvc Ученик (160), закрыт 10 лет назад
как зная Name формы обратиться к ней как к TObject? Хочу для двух форм оперировать одной функцией
procedure Move(x:TObject);
begin
ReleaseCapture;
TForm(x as TForm).Perform(WM_SYSCOMMAND, $F012, 0);
end;
Дополнен 10 лет назад
я процедуру вызываю для двух форм из третьего юнита, это не двойной типкаст.
Дополнен 10 лет назад
проблема в том что я хочу чтоб это работало и на лейблах и кнопках формы, а не знаю как правильно передать овнера чтоб был тип ТФорм.
Лучший ответ
Высший разум (1271064) 10 лет назад
Просто передавай в эту функцию не form1, form2...formN и должно сработать. Это вроде перемещение формы вне заголовка. Думаю, сработает и со строкой:
(x as TForm).Perform(WM_SYSCOMMAND, $F012, 0);Либо лучше TCustomForm вместо TForm подсунуть, если потомки слишком разные. Метод Perform вроде у них есть. А вообще лучшей реализацией будет передавать HWND формы и заюзать SendMessage. Так например:

procedure DragMove(hWin: HWND);
const
 SC_DRAGMOVE = $F012;
begin
 ReleaseCapture;
 SendMessage(hWin, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;
Остальные ответы
Jurijus Zaksas Искусственный Интеллект (473496) 10 лет назад
TForm(x as TForm) - двойной тайпкаст-то нафига? Выбери уж один какой-то.
В остальном все правильно. А если твоя Move изначально будет принимать TForm, то и тайпкаст не нужен.
Похожие вопросы