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

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

Эмуляция фокуса на внутренней форме [D6, WinXP]


Страницы:   1 2

Strumpf ©   (2002-11-04 22:05:00) 

На Form находится Panel1. В Form1.FormCreate:

Form2 := TForm.Create(Form1);
Form2.Parent := Panel1;
Form2.Show;

Как сделать так, чтобы фокус передавался (или эмулировался) на Form2?


Strumpf   (2002-11-05 16:49:00) [1]

>MsGuns © (05.11.02 16:42)

Можно, конечно. Но при этом код будет сильно раздут (и, на мой взгляд, совсем необоснованно), т.к. задача состоит в том, чтобы при приближении границы перемещаемой формы к границе панели нужно сделать так, чтобы это форма "заплывала" под край панели (что, собственно, и происходит при "уматерении").


MsGuns   (2002-11-05 16:42:00) [2]

А почему вместо того, чтобы "уматерять" форму панелью, просто не обрабатывать событие формы на ее перемещении, сравнивая ее координаты с координатами - границами (в данном случае панели) ?


Smithson   (2002-11-05 16:13:00) [3]

Tframe попробуй. По крайней мере глянь реализацию


Strumpf   (2002-11-05 15:42:00) [4]

> Song © (05.11.02 15:38)
Нужно было сделать так, чтобы Form перемещалась по Panel1, не покидая её.


Song   (2002-11-05 15:38:00) [5]

А почему у формы парент - панель?


Strumpf   (2002-11-05 15:23:00) [6]

> Song © (05.11.02 15:13)

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form = new TForm(this);
Form->Parent = Panel1;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Hide();
Form->Show();
}

При нажатии на баттон - всё исчезает с экрана :(((


Song   (2002-11-05 15:13:00) [7]

Ну вот у меня это работает:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Hide;
Form2.Show;
end;

У Вас нет? Или я опять что-то не понял?


Strumpf   (2002-11-05 15:04:00) [8]

> Song © (05.11.02 15:00)
Простите, Вы внимательно прочли постановку задачи, в том числе >Strumpf © (04.11.02 23:17)?


Song   (2002-11-05 15:00:00) [9]

Ну тогда поменняйте главную форму в установках проекта на форму2 или поставьте вторую форму создаваться в dpr последней, что одно и тоже.


Strumpf   (2002-11-05 14:54:00) [10]

> Song © (05.11.02 14:50)
В этом случае не будет видно ни главной, ни второй форм :)


Song   (2002-11-05 14:50:00) [11]

Поставьте Application.ShowMainForm:=False
а форму2 отройте самостоятельно.


Strumpf   (2002-11-05 14:48:00) [12]

Кто-нибудь ещё что-нибудь посоветует стОящее?


Alex4444444444   (2002-11-05 00:13:00) [13]

Ya, chestno govorya, ne proboval, no, mozhet, override
TPanel.CreateParams i vtavit" v style, chto eto---MIDI parent?
(Ne pomnyu, kuda tochno, posmotrite help na CreateWindowEx). No, problema v tom, chto v Delphi vse peredelano (per annus), i chto-nibud" mozhet ne srabotat".


Strumpf   (2002-11-04 23:51:00) [14]

> Alex4444444444 (04.11.02 23:45)
Рабочая область - условное название элемента внутри главной формы. Не более того. У меня - TPanel. В некоторых программах сделано, судя по всему, именно формами, причем MDI-стиль (??).


Alex4444444444   (2002-11-04 23:45:00) [15]

Nu, togda, navernoe, WM_NCPAINT ... A nuzhno li ih delat" formami? Mozhet, prosto TCustomControl s TPainBox sverhu? K stati, pardon za moj russkij :), chto takoe rabochaya oblast"? Client area?


Strumpf   (2002-11-04 23:36:00) [16]

> Alex4444444444 (04.11.02 23:27)

Нет.


Alex4444444444   (2002-11-04 23:27:00) [17]

SetForegroundWindow ne pomogaet?


Strumpf   (2002-11-04 23:17:00) [18]

> down (04.11.02 23:10)
Да всё очень просто. Есть основная форма - главная. И несколько форм, распологающихся внутри какого-либо элемента на главной форме (например, панели) - рабочей области. Эти формы создаются программно и любая из них может стать активной. Чтобы визуально было видно - какая именно и нужно проэмулировать на ней фокус ввода. Можно, конечно, вручную отрисовать полосу захвата, но это - крайний случай. Существует возможность этих действий для MDI. Но нужно, чтобы все окна находились именно на рабочей области. А через MDI это нереализуемо...


Lexa1900   (2002-11-04 23:15:00) [19]

Мона ещё так

var h:hwnd;
begin
h:=FindWindow("TForm2",nil); {вместо nil можно написать кэпшн программы, что более надёжно, пр: h:=FindWindow(nil,"Моя прога"); }
SetActiveWindow(h);

end;


down   (2002-11-04 23:10:00) [20]

Можно установить фокус на какой-нибудь управляющий элемент Form2 в OnShow, а вообще, конечно, странные забавы.


Страницы:   1 2

Наверх

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