Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

Эмуляция фокуса на внутренней форме   Найти похожие ветки 

 
Strumpf ©   (2002-11-04 22:05) [0]

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

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

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


 
down   (2002-11-04 22:19) [1]

Form2.SetFocus не помогает?


 
Strumpf ©   (2002-11-04 22:31) [2]

>down (04.11.02 22:19)

Не помогает :((. Дело в том, что у Form1 фокус остается в любом случае (я так думаю).


 
down   (2002-11-04 22:33) [3]

А если в OnShow для Form2 написать?


 
Strumpf ©   (2002-11-04 22:41) [4]

>down (04.11.02 22:33)

Не помогает. Мне, собственно, нужно проэмулировать MDI-режим.


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

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


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

Мона ещё так

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

end;


 
Strumpf ©   (2002-11-04 23:17) [7]

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


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

SetForegroundWindow ne pomogaet?


 
Strumpf ©   (2002-11-04 23:36) [9]

> Alex4444444444 (04.11.02 23:27)

Нет.


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

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:51) [11]

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


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

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-05 14:48) [13]

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


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

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


 
Strumpf ©   (2002-11-05 14:54) [15]

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


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

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


 
Strumpf ©   (2002-11-05 15:04) [17]

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


 
Song ©   (2002-11-05 15:13) [18]

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

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


 
Strumpf ©   (2002-11-05 15:23) [19]

> 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:38) [20]

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


 
Strumpf ©   (2002-11-05 15:42) [21]

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


 
Smithson ©   (2002-11-05 16:13) [22]

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


 
MsGuns ©   (2002-11-05 16:42) [23]

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


 
Strumpf ©   (2002-11-05 16:49) [24]

>MsGuns © (05.11.02 16:42)

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



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
3-45698
Vityanya
2002-10-27 03:12
2002.11.14
БД


1-45911
Paxer
2002-11-03 11:43
2002.11.14
Help! Как побороть цикличность определения типов записей.


4-46195
Граф
2002-10-05 07:40
2002.11.14
Добавление пункта в контекстное меню Windows Explorer при инсталл


1-45895
irmantukas
2002-11-03 17:53
2002.11.14
GRID+CALENDAR


6-46033
Vasily5000
2002-09-17 04:31
2002.11.14
Delphi, Cgi and MIME.