Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.5 MB
Время: 0.012 c
6-46044
Archont
2002-09-16 00:34
2002.11.14
Робот для чата


1-45794
Stasik
2002-11-01 23:49
2002.11.14
D7 -> TServerSocket


1-45889
AndreiR
2002-11-05 19:04
2002.11.14
Ну почему он так себя ведет?!!


3-45730
AlexGreG
2002-10-23 12:33
2002.11.14
ПАМЯТЬ ...опять в ауте


3-45676
Serginio
2002-10-27 14:08
2002.11.14
Ктонибудь сравнивал ado и dbexpress при работе с MS SQL




   Наверх