Текущий архив: 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