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

Вниз

Как в PopupMenu вставить компонент (например TPanel)?   Найти похожие ветки 

 
frost   (2004-01-12 20:03) [0]

Может PopupMenu1.InsertComponent(Component); - но что то у меня не получается.


 
Юрий Зотов   (2004-01-12 20:15) [1]

Скорее всего, все-таки получается, но не то, что хочется. А вот что хочется - непонятно. Уточните - что же имеется в виду?


 
frost   (2004-01-12 20:21) [2]

Необходимо вставить Panel в PopupMenu все это для того чтобы работасть с DropDown menu у SpeedButton, могу создавать окно и выставлять его как PopupMenu, координаты и т.д. но это немного не то. Единственное что могу это PopupMenu1.InsertComponent(Panel); но никакой панели не появляется?


 
Юрий Зотов   (2004-01-12 20:43) [3]

Так, теперь задача понятна, идем дальше.

1. Смотрим справку - что же конкретно делает InsertComponent?
2. Как Вы считаете, можно ли вообще вставить панель в меню?


 
frost   (2004-01-12 22:18) [4]

То есть мне надо самому рисовать пункт меню. Либо показывать панель в отдельном окне? Если я правильно понял.


 
Юрий Зотов   (2004-01-12 22:36) [5]

Так, движемся дальше. Возвращаемся к исходной задаче - что Вы хотите получить? Только, пожалуйста, простыми русскими словами, без всяких меню и панелей. Что и когда должно появиться на экране?


 
Palladin   (2004-01-12 22:46) [6]

Все конечно жутко смутно, но подменю делается простым добавлением в нужный Item других Item.


 
Ломброзо   (2004-01-12 22:57) [7]

ala Access?

Всё это конечно, ужасно, но добавлять на Popup menu контролы навроде Edit или Combobox - очень муторно. Можно создать плавающий Edit или Combobox, вычислять размеры MemuItem"а в OnMeasureItem и позиционировать плавающий контрол в рамки этого пункта меню в OnDrawItem, но меню будет исчезать при установке фокуса в этот контрол. Мне кажется, что проще будет имитировать само Popup меню какой-нибудь плавающей по экрану панелью и разместить контролы ввода прямо на ней.
ЗЫ сам не пробовал.


 
frost   (2004-01-12 22:59) [8]

Есть кнопка со свойством DropDownMenu мне надо чтобы по нажатию на эту кнопку появлялась панель которую я создаю сам, вот собственно и все. Я сейчас делаю на OnClick кнопки создаю окно без заголовка и отображаю его в соответствии с тем где находится кнопка (внешне похоже на PopupMenu и все хорошо но это дополнительное окно - изменение заголовка на неактивный у MainForm)


 
frost   (2004-01-12 23:02) [9]

Ломброзо > Что такое - плавающий контрол? Имеется в виду что кнопка это тоже окно? Может мне и Panel так сделать, и тогда моя проблема решена?


 
Ломброзо   (2004-01-12 23:21) [10]

Писал штуку одну давно... Идею, надеюсь, поймешь.
Плавающее окно имеет родителем десктоп.
try except finally Расставить по вкусу. Вместо наследника TListBox написать наследника Tpanel.

TXNList = class(TListBox)
private
protected
FOnClick: TNotifyEvent;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure MouseLeave(var Message: Tmessage); message CM_MOUSELEAVE;
procedure MouseEnter(var Message: TMessage); message CM_MOUSEENTER;
public
constructor Create(AOwner: TComponent); override;
published
property OnClick: TNotifyEvent read FOnClick write FOnClick;
end;

constructor TXNList.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;

procedure TXNList.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Style := Style or WS_BORDER;
ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
AddBiDiModeExStyle(ExStyle);
WindowClass.Style := CS_SAVEBITS;
end;
end;

procedure TXNList.CreateWnd;
begin
inherited CreateWnd;
Windows.SetParent(Handle, 0);
CallWindowProc(DefWndProc, Handle, wm_SetFocus, 0, 0);
end;

procedure TXNList.MouseEnter(var Message: TMessage);
begin
Self.Visible := true;
end;

procedure TXNList.MouseLeave(var Message: Tmessage);
var pStart: ULONG;
begin
pStart:=GetTickCount;
while (pStart + 2000 < GetTickCount) do
Application.ProcessMessages();
Self.Visible := false;
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
var APoint: TPoint;
begin
APoint.x := ToolButton1.Left;
APoint.y := ToolButton1.Top + ToolButton1.Height;
Windows.ClientToScreen(Handle, APoint);
FList.Left := APoint.x;
FList.Top := APoint.y;
FList.Visible := true;
Windows.SetForegroundWindow(FList.Handle);

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FList := TXNList.Create(nil);
FList.Parent := self;
FList.Left := 10000;
FList.Ctl3D := False;
FList.ParentCtl3D := false;
FList.Visible := false;
end;


 
Юрий Зотов   (2004-01-12 23:36) [11]

> frost © (12.01.04 22:59) [8]

При чем тут меню - непонятно. Еще непонятнее, зачем вставлять в меню панель и как это вообще можно сделать.

Плавающий контрол - это вариант, но довольно трудоемкий. Не подойдет ли вот такое простейшее решение:

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
Form2.Parent := Self;
Form2.Show
end;

Все сработает как нужно и заголовок Form1 не изменится. Но у такого решения есть недостаток - Form2 должна располагаться в пределах клиентской части родительской формы. Если это устраивает, то нет проблем.


 
Ломброзо   (2004-01-12 23:40) [12]

он имел в виду, что при использовании в качестве контейнера формы с главной формы уходит фокус и "сереет" заголовок. Некрасиво. Хотя в .NET, я смотрю, Microsoft с этим не заморачивается, и в своём Property Grid так и сделали - редактор свойства типа "дата время" вываливается на форме (т.е. OVERLAPPEDWINDOW) в виде DateTimeCOntrol, размещенного на ней.



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

Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-72801
qwert
2004-01-12 20:41
2004.01.23
Добавить строку перед всем


7-72957
СержК
2003-11-06 11:51
2004.01.23
Как узнать пользователя


8-72842
Meteor
2003-09-21 21:14
2004.01.23
Видео Проигрыватель


1-72709
emperor
2004-01-11 23:25
2004.01.23
Adobe PDF


8-72848
Lancelot
2003-09-19 20:09
2004.01.23
Масштабирование изображения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский