Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





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


3-45668
Sten
2002-10-27 21:16
2002.11.14
Filter or Sort.


14-46072
Yegor Derevenets
2002-10-21 15:57
2002.11.14
PP


8-46008
SBad
2002-07-28 14:29
2002.11.14
Список значений TColor для режима


1-45928
Кен
2002-11-01 07:58
2002.11.14
А нет ли какой нибудь программы для перевода паскаля в ассемблер?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский