Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > 1.fsStayOnTop и 2.TPanel


Автор: offline 5.3.2005, 17:21
Мастера, помогите, у меня есть две проблемы!

1. Я хочу сделать так, что бы по нажатии кнопки на панели инструментов мое приложение было по верх всех окон или принимало обычное состояние.
Я делаю так

butFormUp – кнопка на панели инструментов. Ее стиль tbsCheck
frmMain – главная форма приложения

Код

if butFormUp.Down
 then begin
  frmMain.FormStyle := fsStayOnTop;
  butFormUp.Hint := 'Поверх всех окон';
  end
 else begin
  frmMain.FormStyle := fsNormal;
  butFormUp.Hint := 'Обычный режим';
  end;


В принципе все работает, но при переключении между режимами форма моргает (как будто перерисовывается), вот как избавится от этого неприятного моргания? Или я, что то не правильно сделал?

2. Как мне создать панель TPanel , чтобы у нее был заголовок и кнопка закрыть и она не перемещалась внутри приложения? Это типа такой когда у TPanel DragKind := dkDock и DragMode := dmAutomatic и потаскать ее во время исполнения. Вот она мне и нужна, но она таскается во время выполнения программы, а мне это не нужно, мне нужна она только в определенном месте, да и при старте приложения она выглядит как обычная панель, а модифицируется только когда ее подвигаешь, а мне нужна она уже модифицируемая при старте программы.

Заранее благодарю



Автор: _hunter 5.3.2005, 18:16
1 -- это нормально ( посмотри на работу Object Inspector' a )

2 -- при перемещении панель _становится_ простым окном. поэтому паказывай окно

Автор: Girder 5.3.2005, 19:15
Цитата(kirilllius @ 5.3.2005, 17:21)
В принципе все работает, но при переключении между режимами форма моргает
Проверять лень... но он вроде пересоздает форму smile

1.
-Поверx(т.е. fsStayOnTop):
Код
SetWindowPos(Form1.Handle,HWND_TOPMOST,Form1.Left,Form1.Top,Form1.Width,Form1.Height,SWP_FRAMECHANGED);

-Сбрасываем (т.е. fsNormal)
Код
SetWindowPos(Form1.Handle,HWND_NOTOPMOST ,Form1.Left,Form1.Top,Form1.Width,Form1.Height,SWP_FRAMECHANGED);


2.
Код
SetWindowLong(Panel1.Handle,GWL_Style,(GetWindowLong(Panel1.Handle,GWL_Style) or WS_DISABLED or WS_SYSMENU or WS_CAPTION));

Автор: Гость_kirilllius 5.3.2005, 20:44
>_hunter
так окно будет перемещаться за форму, а мне нужно показывать его внутри ее

>Girder
Большое спасибо с первым вопросом, форма действительно перестала моргать smile , а вот с панелью небольшая проблемка, она никак не реагирует на этот код

Код

SetWindowLong(Panel1.Handle,GWL_Style,(GetWindowLong(Panel1.Handle,GWL_Style) or WS_DISABLED or WS_SYSMENU or WS_CAPTION));


Она какой была такой и остается после выполнения этого кода. smile
а может я что не правильно понял


Автор: _hunter 5.3.2005, 20:47
Цитата
так окно будет перемещаться за форму, а мне нужно показывать его внутри ее

ну сделай его MDI-child - ом

Автор: offline 5.3.2005, 20:48
>_hunter
так окно будет перемещаться за форму, а мне нужно показывать его внутри ее

>Girder
Большое спасибо с первым вопросом, форма действительно перестала моргать smile , а вот с панелью небольшая проблемка, она никак не реагирует на этот код

Код

SetWindowLong(Panel1.Handle,GWL_Style,(GetWindowLong(Panel1.Handle,GWL_Style) or WS_DISABLED or WS_SYSMENU or WS_CAPTION));


Она какой была такой и остается после выполнения этого кода. smile
а может я что не правильно понял smile


Добавлено @ 20:49
>_hunter

>ну сделай его MDI-child - ом

не, так не пойдет. Мне нужно просто как плавающая панель, только что бы не плавала (не перемещалась)

Автор: _hunter 5.3.2005, 21:56
то, что ты называеш плавающей панелью -- простое окно. поэтому показывай окно ( вид -- тот же ) + запрети перемещения

Автор: offline 5.3.2005, 23:45
А как закрепить его?
Дело в том, что у меня на форме лежит TImage (G32) который занимает весь размер формы. В него выводятся фотографии. Я положил панель на TImage и поместил в неё древо диска и список файла, ну сделал, что то типа навигатора. Вот я и хочу, чтобы этот навигатор лежал в определенном месте и не двигался, а кнопочка нужна для того, чтобы его прятать, а затем вызывать из меню или горячей клавишей. Я положил вообще то на панель, Label и кнопку, сделал вид окна, но это выглядит немного коряво и не стандартно, а хотелось бы, чтобы все выглядело идеально.

Автор: DonPager 6.3.2005, 15:25
ИМХО - если хочешь чтобы панель не перемещалась, то и "загололовок с кнопкой" там не нужен - просто сделай чтобы панель показывалась/исчезало только через менюшку или хоткей - а так - только лишее место на форме зангимать будешь ... а для "МОРЕ ФЛЕКСИБИЛИТИ" всётаки лучше мди чилд...

Автор: offline 6.3.2005, 16:33
Понятон, так у меня и есть
Цитата
показывалась/исчезало только через менюшку или хоткей
Наверное придется так и оставлять. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)