Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];




Вниз

Первый раз в жизни спрашиваю о компоненте :) 


Кот Бегемот   (2003-01-16 18:50) [0]

Подскажите идейку как реализовать или дайте линк на компонент ???
Нужно сделать PopUp меню в ХР-стиле но с разделителями и заголовками тем примерно так как это сделано в аське - например
"------- My Info -------"
"------- My Tools ------"

и подобное :)
Все найденные ХР-стильные менюшки не реализуют идеи разделов в рамках одной менюшки :(((



vuk   (2003-01-16 19:01) [1]

ExpressBars www.devexpress.com



Кот Бегемот   (2003-01-16 19:10) [2]

2vuk © (16.01.03 19:01)
Спасибо.

Небольшие уточнения:
Приоритетными всетаки есть как реализовать :)))
И еще - не надо мне рекомендовать платные наборы компонентов - весом в несколько метров.
Или хотя бы линки давайте нормальные - а не www.devexpress.com или www.microsoft.com - tоt же Developer Express нормально скачивал с какого-то толи китайского толи тайваньского сайта.
Нууу не может Express Bar делать менюшки с разделами - по крайней мере 4-я версия :( - не может.



vuk   (2003-01-16 19:16) [3]

>И еще - не надо мне рекомендовать платные наборы компонентов -
>весом в несколько метров.
Вы просили линк. Вам его дали.

>Или хотя бы линки давайте нормальные
Какие есть такие и даю.

>Нууу не может Express Bar делать менюшки с разделами - по
>крайней мере 4-я версия :( - не может.
Да? А на скриншоте там что? Правильно, меню с раскрывающимися разделами. Так же как в ICQ.



Кот Бегемот   (2003-01-16 19:20) [4]

2vuk © (16.01.03 19:16)
>Так же как в ICQ.
У нас наверно разные аськи :-\ - у мя 2003а
Хотя думаю пример достаточно красноречив:
"------- My Info -------"



Кот Бегемот   (2003-01-17 11:32) [5]

Subj все еще актуален :)))



Дмитрий Баранов   (2003-01-17 12:12) [6]

Идейка рисовать его самому, OwnerDraw.

Для примера могу посоветовать или хелп, или VCL, или поискать в MSDN статьи Paul DiLascia, например,
"Give Your Applications the Hot New Interface Look with Cool Menu Buttons" - если нужно поковыряться в кишках :)



Дмитрий Баранов   (2003-01-17 12:28) [7]

Принцип рисования примерно таков :))

Test1 - это TmenuItem в PopupMenu

procedure TForm1.Test1MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Width:=200;
Height:=20;
end;

procedure TForm1.Test1DrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
var Rect: TRect;
begin
Rect.Top := 10;
Rect.Bottom := 12;
Rect.Left:=2;
Rect.Right:=80;
if (Selected) then
begin
ACanvas.Brush.Color := clRed
end
else
begin
ACanvas.Brush.Color := clBtnFace;
end;
ACanvas.FillRect(ARect);
DrawEdge(ACanvas.Handle, Rect, EDGE_ETCHED, BF_RECT );
Rect.Left:=120;
Rect.Right:=200;
DrawEdge(ACanvas.Handle, Rect, EDGE_ETCHED, BF_RECT );
ACanvas.TextOut(90, 2, "Test");
end;



Кот Бегемот   (2003-01-17 13:19) [8]

2Дмитрий Баранов © (17.01.03 12:28)
Большое спасибо что ответили мне :)

Но это отрисует только один элемент меню
А мне же надо рисовать полностью меню.
Мало того - при перекрытии TPopupMenu - например как это сделано в TRxPopupMenu - клентская область все равно меньше рабочей области - что приводит к тому - что даже на полностью отрисованной менюшке видна рамочка - что осталась от оригинального PopupMenu - нууу это же совсем не ХР-стиль - а так насмешка какаято :(((



Дмитрий Баранов   (2003-01-17 14:18) [9]

А шут его знает, как эту рамку убрать. Я тоже этим интересовался, так и не осилил. Может, вам Юрия Зотова стоит попытать?
В Mozilla, например, почти все контролы самодельные, могу дать только дурацкий совет исходники поковырять, как это у них реализовано. Если не лень :)



Кот Бегемот   (2003-01-17 14:56) [10]

2Дмитрий Баранов © (17.01.03 14:18)
>как это у них реализовано.

:-\



Mischka   (2003-01-17 15:44) [11]

Насчет рамочек могу посоветовать только использовать полностью свои PopUpMenu :)
А разделы можно и в стандартном сделать. С помощью Owner draw сстесстно...
Я тут делал менюшку:


procedure TMainForm.DrawMenuItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
var
SCut: string;
begin
SCut:=ShortCutToText((Sender as TMenuItem).ShortCut);
ACanvas.Brush.Color:=clBtnFace;
ACanvas.Pen.Color:=clBtnFace;
ACanvas.Rectangle(ARect.Left-3, ARect.Top, ARect.Left+24, ARect.Bottom);
ACanvas.Brush.Color:=clWhite;
ACanvas.Pen.Color:=clWhite;
ACanvas.Rectangle(ARect.Left+24, ARect.Top, ARect.Right, ARect.Bottom);
if (Sender as TMenuItem).Enabled then
if Selected then
begin
ACanvas.Brush.Color:=clHighlight;
ACanvas.Pen.Color:=clMenuText;
ACanvas.Rectangle(ARect.Left+2, ARect.Top, ARect.Right-2, ARect.Bottom);
if (Sender as TMenuItem).Caption<>"-" then
begin
ACanvas.Font.Color:=clHighlightText;
ACanvas.TextOut(ARect.Left+26, ARect.Top+3, (Sender as TMenuItem).Caption)
end
else
begin
ACanvas.Pen.Color:=clBtnFace;
ACanvas.moveTo(ARect.Left+27, ARect.Top+2);
ACanvas.LineTo(ARect.Right, ARect.Top+2)
end;
if SCut<>"" then ACanvas.TextOut(ARect.Right-ACanvas.TextWidth(SCut)-5, ARect.Top+3, SCut);
if (Sender as TMenuItem).Checked then SmallImages.Draw(ACanvas, ARect.Left+5, ARect.Top+3, 3)
else
if (Sender as TMenuItem).ImageIndex<>-1 then
hotImages16.Draw(ACanvas, ARect.Left+5, ARect.Top+3, (Sender as TMenuItem).ImageIndex);
end
else
begin
if (Sender as TMenuItem).Caption<>"-" then
begin
ACanvas.Font.Color:=$00000000;
ACanvas.TextOut(ARect.Left+27, ARect.Top+4, (Sender as TMenuItem).Caption)
end
else
begin
ACanvas.Pen.Color:=clBtnFace;
ACanvas.moveTo(ARect.Left+27, ARect.Top+2);
ACanvas.LineTo(ARect.Right, ARect.Top+2)
end;
if SCut<>"" then ACanvas.TextOut(ARect.Right-ACanvas.TextWidth(SCut)-5, ARect.Top+4, SCut);
if (Sender as TMenuItem).Checked then SmallImages.Draw(ACanvas, ARect.Left+5, ARect.Top+3, 4)
else
if (Sender as TMenuItem).ImageIndex<>-1 then
Images16.Draw(ACanvas, ARect.Left+5, ARect.Top+3, (Sender as TMenuItem).ImageIndex);
end
else
begin
if (Sender as TMenuItem).Caption<>"-" then
begin
ACanvas.Font.Color:=clBtnFace;
ACanvas.TextOut(ARect.Left+27, ARect.Top+4, (Sender as TMenuItem).Caption)
end
else
begin
ACanvas.Pen.Color:=clBtnFace;
ACanvas.moveTo(ARect.Left+27, ARect.Top+2);
ACanvas.LineTo(ARect.Right, ARect.Top+2)
end;
if SCut<>"" then ACanvas.TextOut(ARect.Right-ACanvas.TextWidth(SCut)-5, ARect.Top+4, SCut);
if (Sender as TMenuItem).Checked then SmallImages.Draw(ACanvas, ARect.Left+5, ARect.Top+3, 3)
else
if (Sender as TMenuItem).ImageIndex<>-1 then
disImages16.Draw(ACanvas, ARect.Left+5, ARect.Top+3, (Sender as TMenuItem).ImageIndex);
end
end;

procedure TMainForm.exit1MeasureItem(Sender: TObject; ACanvas: TCanvas;
var Width, Height: Integer);
begin
Height:=Height+4;
Width:=Width+32
end;



халява



Кот Бегемот   (2003-01-17 16:12) [12]

2Mischka © (17.01.03 15:44)
В том то и прикол Мишка - что рисовать я могу только MenuItem - нуу и еще рабочую область - например надпись сбоку вывести и т.п. - от рамки избавиться не получается :(((
А полностью свое - можно конечно - но чтобы его можно было использовать вместо стандартного - наверно должно наследоваться от TPopupMenu - чтобы TControl.PopupMenu нормально работало.
От така х#$%ня, малята :)



Mischka   (2003-01-17 16:15) [13]

Трабл в том, что если нужно избавиться от рамки (и другие способы нам неизвестны!) нужно делать свой компонент. Но у наследника TPopupMenu наверняка есть метод Paint(), который прекрасно можно перекрыть своим любимым. Щас посмотрю, чтоб быть уверенным...



Кот Бегемот   (2003-01-17 16:34) [14]

Ага - фиг Вам - нету там такого метода TPopupMenu - это только обертка :(((



Mischka   (2003-01-17 16:36) [15]

нету :(

пиши свой контрол.




Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.76 MB
Время: 0.035 c
1-4877            Nikolay Enby          2003-01-24 22:35  2003.02.03  
TNotifyIconData


1-4993            xxxCrazyManxxx        2003-01-23 16:14  2003.02.03  
Help on Click


1-4984            AlexG                 2003-01-23 14:23  2003.02.03  
Массив в Ресурс


1-5052            sdram                 2003-01-23 14:34  2003.02.03  
Помогите правильно вывести текст в TQuickRep


3-4722            Ahmad K               2003-01-18 02:23  2003.02.03  
Точный адрес...