![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Эмуляция фокуса на внутренней форме [D6, WinXP]
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, а вообще, конечно, странные забавы.