Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с кнопками "развернуть", "переместить"


Автор: DoZENT 29.8.2006, 15:04
Почему-то у любого приложения, написаного на делфаке отстутствуют строчки "развернуть", "переместить" и т.д. в контекстном меню, которое вызывается из таскбара. Есть только восстановить (неактивная), свернуть и закрыть. Это у меня одного такая проблема или нет?

Автор: Romikgy 29.8.2006, 15:08
Код

 appearance and behavior of the form border.

Delphi syntax:

property BorderStyle: TFormBorderStyle;

C++ syntax:

__property TFormBorderStyle BorderStyle = {read=FBorderStyle, write=SetBorderStyle, stored
=IsForm, default=2};

Description

Use BorderStyle to get or set the appearance and behavior of the form border. BorderStyle can be any of the following TFormBorderStyle values:

Value    Meaning

bsDialog    Not resizable; standard dialog box border
bsSingle    Not resizable; single-line border
bsNone    Not resizable; no visible border line
bsSizeable    Standard resizable border
bsToolWindow    like bsSingle but with a smaller caption
bsSizeToolWin    like bsSizeable with a smaller caption

Note:    Changing the border style of an MDI child form to bsDialog or bsNone has no effect.

имхо с этой пропертей трабла

Автор: Snowy 29.8.2006, 15:52
Нет переместить и размера - потому что у Application нет размера.
Включить можно у главной формы:
Код

type
  TForm1 = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; // выносим на панель главное окно
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE); // убираем Application
end;



Добавлено @ 16:02 
Хотя нет.
Вот так даже короче:
Код

procedure TForm1.FormShow(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
  ShowWindow(Application.Handle, SW_HIDE);
end;

Автор: Snowy 29.8.2006, 16:15
ХМ. Подглючивает при разворачивании.
Вот так вроде всё нормально работает:
Код

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure SetTaskBar(Sender: TObject);
  end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SetTaskBar(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  SetTaskBar(Self);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnRestore := SetTaskBar;
end;

Автор: DoZENT 29.8.2006, 18:11
Спасибо, Snowy, вопрос решен!

Автор: Snowy 30.8.2006, 09:41
Я подправил код - поменял местами строки в SetTaskBar, а то на медленных машинах фокус с подменой заметен.
Так он менее очевиден.

Автор: DoZENT 30.8.2006, 22:50
Блин, только сейчас заметил: после применения этого кода происходит такая хрень: открываешь модально окно, оно на переднем фоне, все правильно. Но если, оставляя это модальное окно открытым, переключиться на другое приложение, а потом обратно, то уже главная форма перекрывает то окно, а т.к. оно модальное, то ни на главной форме нажать ничего нельзя, ни модальное окно увидеть, т.к. его перекрывает главное, извиняюсь за тавтологию smile Что можно сделать?

Автор: Snowy 31.8.2006, 11:47
Спрятать главное окно перед открытием модального. smile
А при закрытии модального - показать главное... 

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