Форум: "Прочее";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизРабота с окнами как в Deplhi IDE Найти похожие ветки
← →
Kostafey © (2007-03-25 15:02) [0]Подскажите, пожалуйста как организовать взамодействие окон как в Delphi.
Чтобы вверху было онкно с тулбаром и меню, а внизу онка при нажатии на кнопку развернуть
разворачивались бы так, чтобы не закрывать главное(верхнее окно).
Событие нижнего окна:
procedure TFormDogovor.FormResize(Sender: TObject);
begin
if Top<100 then
begin
Top:=100;
Height:=Height-110;
end;
end;
если высота верхнего окна 100, то получается для раскрытия окна на весь экран, но если просто
растягивать нижнее окно вверх, то получается сосвсем не красиво.
Может быть можно как-то поймать тот момент, когда WindowState становится wsMaximized ?
← →
Belorus © (2007-03-25 15:32) [1]кури Window Messages.
← →
Kostafey © (2007-03-25 15:38) [2]> кури Window Messages.
Плин, это что же придется в WinAPI залазить ?
← →
Юрий Зотов © (2007-03-25 16:08) [3]См. WM_GETMINMAXINFO
← →
Fredy314 © (2007-03-25 16:15) [4]procedure TFormDogovor.FormResize(Sender: TObject);
begin
If (form1.WindowState = wsMaximized) Then
...
← →
Kostafey © (2007-03-25 16:18) [5]> [4] Fredy314 © (25.03.07 16:15)
Я тоже так думал.
Ан нет, событие ресайза происходит до того как WindowState принимает значение wsMaximized
← →
Fredy314 © (2007-03-25 16:21) [6]проверил вариант из [0] при ресайзе вполне нормальній вариант,только при перемещении окна можно поднять выше.
← →
Fredy314 © (2007-03-25 16:24) [7]а onMove для окна нету, видимо придётся всётаки а WinApi
← →
Kostafey © (2007-03-25 17:00) [8]> [3] Юрий Зотов © (25.03.07 16:08)
> См. WM_GETMINMAXINFO
Подскажите пожалуйста как именно отловить развертывание окна.
А то WM_GETMINMAXINFO много чего еще "ловит"
По крайней мере если посмотреть:
TForm1
procedure WMUser(var Msg: TMessage); message WM_GETMINMAXINFO;
...
procedure TForm1.WMUser(var Msg: TMessage);
begin
showmessage(inttostr(Msg.LParam));
end;
← →
Kostafey © (2007-03-25 18:05) [9]Вот получилось. Не знаю как там до кода, но внешне работает как и окна Delphi:
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Panel1: TPanel;
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WMUser(var Msg: TMessage); message WM_GETMINMAXINFO;
end;
var
Form1: TForm1;
FullSize:boolean=false;
const
HederFormHeight=100;
implementation
{$R *.dfm}
procedure TForm1.WMUser(var Msg: TMessage);
begin
if (Msg.LParam=1238916) and (Self.WindowState=wsNormal) then
begin
FullSize:=true;
WindowState:=wsMaximized;
exit;
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
if ((WindowState=wsMaximized) and (FullSize)) then
begin
Top:=HederFormHeight;
Height:=Screen.Height-129;
FullSize:=false;
end;
end;
Где 1238916-установлено методом научного тыка, 129-высота панели задач.
Попиайте кому не лень.
← →
RASkov (2007-03-25 18:24) [10]> [9] Kostafey © (25.03.07 18:05)
Нифика ниче не работает, а что должно было быть, я так и не понял.... :(
> Попиайте кому не лень.
Так... держи слегонца... :)
← →
Kostafey © (2007-03-25 18:34) [11]> Нифика ниче не работает, а что должно было быть, я так и
> не понял.... :(
Понял я почему не работает.
Для каждого окна Msg.LParam нужно свой находить.
В одном случае получилось 1238916 (в экспиремтальной проге), а как к основной задаче вернулся для первого окна
получилось 1238912.
Что это такое и с чем это есть положено пока не понял, но так оставлять нельзя...
Интересно а если эту прогу на другом PC запустить то же число измениться ?...
Копаю дальше...
короче,
> Так... держи слегонца... :)
есть за что.
← →
Kostafey © (2007-03-25 19:28) [12]> Msg.LParam=1238916
Оказывается Msg.LParam не число а указатель.
Вопрос в том как из него что-то полезное извлечь
← →
Kostafey © (2007-03-25 19:57) [13]Трындец. Подня возился. Решение-то в 2 строчки умещается:
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Panel1: TPanel;
private
{ Private declarations }
public
{ Public declarations }
procedure WMUser(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
end;
var
Form1: TForm1;
const
HederFormHeight=100;
implementation
{$R *.dfm}
procedure TForm1.WMUser(var Msg: TWMGetMinMaxInfo);
begin
Msg.MinMaxInfo^.ptMaxPosition.Y:=HederFormHeight;
Msg.MinMaxInfo^.ptMaxSize.Y:=Screen.Height-129;
end;
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c