Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форма без заголовка


Евгений Р. ©   (2007-11-06 20:12:00) 

Хочу создать форму без заголовка в нужном месте экрана.
Если указывается    result.BorderStyle:=bsNone, то форма открывается в левом верхнем углу. Если строка закомментирована, то открывается как положено.

  result:=TfWorkChees_Plan_Hint.Create(application);
  result.BorderStyle:=bsNone;
  rect:=etc.rect;
(etc.chPlanPanel).owner).ClientToScreen(rect.TopLeft);
  rect.TopLeft:=tPanel(etc.chPlanPanel).ClientToScreen(rect.TopLeft);
(etc.chPlanPanel).owner).ClientToScreen(rect.BottomRight);
  rect.BottomRight:=tPanel(etc.chPlanPanel).ClientToScreen(rect.BottomRight);
  result.Left:=rect.Left;
  result.Top:=rect.Bottom;


Евгений Р.   (2007-11-07 12:21:00) [1]

Спасибо, RASkov!

Свел проблему в пробный проект.

Форму создаю динамически.
Под Д5 работает и button1 и button2.
Под Д2005 правильно работает только button2, т.е. при удалении заголовка на изменение положения реагирует только после показа формы.
В принципе не существенно, но дойти нужно было.

unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button2Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   frm:tForm;
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  frm:=tFOrm.Create(application);
  frm.Left:=100;
  frm.top:=100;
  frm.BorderStyle:=bsNone;

  frm.show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  frm:=tFOrm.Create(application);
  frm.BorderStyle:=bsNone;
  frm.show;
  frm.Left:=100;
  frm.top:=100;
end;

end.


{RASkov}   (2007-11-07 01:33:00) [2]

> [4] Евгений Р.   (06.11.07 22:39)
> Я говорю, что форма не перемещается по экрану при изменении Top и Left!

Наверное только у тебя этот "косяк".)
Вот так вот перемещается:
procedure SF;
begin
 with TForm.Create(Application) do begin
  Show;
  BorderStyle:=bsNone;
  Left:=(Screen.Width-Width) div 2;
  ShowMessage('До перемещения');
  Left:=Left-100;
  ShowMessage('После перемещения');
  Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SF;
end;

..да и в чем сомнения могут быть?
В прочем что у тебя тут....

>  rect:=etc.rect;
> (etc.chPlanPanel).owner).ClientToScreen(rect.TopLeft);
>  rect.TopLeft:=tPanel(etc.chPlanPanel).ClientToScreen(rect.TopLeft);
> (etc.chPlanPanel).owner).ClientToScreen(rect.BottomRight);
>  rect.BottomRight:=tPanel(etc.chPlanPanel).ClientToScreen(rect.BottomRight);
>  result.Left:=rect.Left;
>  result.Top:=rect.Bottom;

...происходит, я не вникал.)


Евгений Р.   (2007-11-06 22:39:00) [3]

О каком ерроре идет речь? Я говорю, что форма не перемещается по экрану при изменении Top и Left!


Dib@zol   (2007-11-06 21:23:00) [4]

У меня всё работает (в FormCreate). Ты где это обрабатываешь? Если можешь, приведи простенький пример, гдеетот окоянный еррор появляется. По тому коду, что ты выкладываешь, понять этого нельзя.


Евгений Р.   (2007-11-06 20:59:00) [5]

строка frm.left=100 - перемещает форму в точку с координатой 100.

Если ей предшествует строка
frm.BorderStyle:=bsNone,
то перемещение не работает.
Почему?


Dib@zol   (2007-11-06 20:36:00) [6]

Данный выдранный фрагмент не даёт полного представления о том, что ты хочешь сделать. Конкретизируй.
А пока что ограничусь общим советом: юзай MoveWindow.


Наверх

Титульная страница Поиск, карта сайта Написать письмо