Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-5146
Кот Бегемот
2003-01-16 18:50
2003.02.03
Первый раз в жизни спрашиваю о компоненте :)


1-4827
3asys
2003-01-20 14:31
2003.02.03
Сохранение в TTreeNode.Data сгенерированного GUID и показ его.


1-4951
vvvaaa
2003-01-26 15:32
2003.02.03
TreeView


1-4881
Cr@sh
2003-01-24 13:38
2003.02.03
StringGrid -> *.xls


3-4806
Valeris
2003-01-17 11:20
2003.02.03
подключение к SQL серверу в консольном приложении





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