Форум: "Потрепаться";
Текущий архив: 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]нету :(
пиши свой контрол.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c