Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизРисование разделителя Найти похожие ветки
← →
KhazModan © (2004-03-27 18:17) [0]Как можно нарисовать разделитель меню?
Смотрел Menus.pas - где рисуется разделитель так и не нашел.
← →
TButton © (2004-03-27 18:34) [1]
Caption:="-"
;)
← →
KhazModan © (2004-03-27 18:39) [2]> [1] TButton © (27.03.04 18:34)
Очень смешно.
И как с поможью вашего "метода" нарисовать разделитель, скажем, на форме?
← →
Rouse_ © (2004-03-27 18:43) [3]И как с поможью вашего "метода" нарисовать разделитель, скажем, на форме?
:)))))))))))))))))))))))))))))))))
Отрывайте меня от пола - меня расплющило :))))))))))))
← →
TUser © (2004-03-27 18:54) [4]
> И как с поможью вашего "метода" нарисовать разделитель,
> скажем, на форме?
Caption:="-------------------------------------------";
:)))
← →
Юрий Зотов © (2004-03-27 19:07) [5]> KhazModan
Либо подойдет TBevel, либо задайте вопрос так, чтобы он был понятен не только Вам.
← →
TButton © (2004-03-27 19:33) [6]Как можно нарисовать разделитель меню?
я че дурак? или просто что-то не понимаю? разделитель, это такая горизонтальная черта в менюшке типа того же бевела, а делается она как простой пункт меню с кепшеном -
← →
KhazModan © (2004-03-27 22:25) [7]TButton © (27.03.04 19:33)
> я че дурак?
Это Вы меня спрашиваете? Я думаю, Вам лучше знать, дурак Вы или нет.
> а делается она как простой пункт меню с кепшеном -
Если не вникать, да.
Но на самом деле, нарисовать разделитель путём изменения свойства Caption, не получится, не так ли?
> All
Хорошо, спрошу по-другому.
С помощью какой функции рисуется разделитель в меню?
Дело в том, что в разных виндах он выглядит по-разному.
А мне нужно нарисовать на форме разделитель точно такой, как в меню.
← →
TButton © (2004-03-27 22:34) [8]*рыдает* какой еще нафиг разделитель! он везде одинаковый рельефная горизонтальная полосочка! отстаньте от меня! напишите в кепшен "-" и будет вам разделитель! *рыдает*
← →
Rouse_ © (2004-03-27 22:42) [9]Таким образо ты спрашиваешь
"С помощью какой функции рисуется разделитель в меню?
так чтоли?
Хотя мне побоку как он там делается - хочу такое же на форме сделать..."
Зачем тогда про функцию спрашиваешь? Нет там ее... все зависит от стиля - в основном это Bevel или исходя из текущей темы (для ХР)...
← →
Игорь Шевченко © (2004-03-27 23:09) [10]
> С помощью какой функции рисуется разделитель в меню?
С помощью задания типа MFT_SEPARATOR в элементе меню.
Рисуется, натурально функцией LineTo.
← →
KhazModan © (2004-03-27 23:09) [11]Вот-вот, а как же мне нарисовать его исходя из текужей темы?
TButton © (27.03.04 22:34)
> отстаньте от меня!
Я к Вам и не приставал.
> он везде одинаковый рельефная горизонтальная полосочка!
Показать своё незнание никогда не поздно.
http://menusmenus.narod.ru/sep.htm
Рыдайте дальше.
Rouse_ © (27.03.04 22:42)
>Хотя мне побоку как он там делается - хочу такое же на форме сделать
Неужели это мои слова?
> Нет там ее
Хм, а каж он он тогда рисуется??
> или исходя из текущей темы (для ХР)
Вот и это и имею ввиду. При разных темах выглядеть он будет по-разному.
P.S. Надеюсь, хоть Юрий Зотов мне поможет, раз он заинтересовался этим вопросом.
← →
KhazModan © (2004-03-27 23:11) [12]> Игорь Шевченко © (27.03.04 23:09)
Игорь, а как определить рисовать его с бордюром(для 98/w2k) или без (XP со стилями)?
← →
Игорь Шевченко © (2004-03-27 23:19) [13]KhazModan © (27.03.04 23:11)
Я тут услышал слова про разные темы...Так вот, рисование меню перехватывается менеджером тем, который рисует элементы в зависимости от выбранной темы. Тему можно узнать функцией GetCurrentThemeName или функцией IsAppThemed, позволяющей узнать, применимы ли темы к текущему приложению. Разумеется, эти функции доступны только в Windows XP и более поздних версиях. Находятся они в uxtheme.dll, их объявления можно посмотреть на www.delphi-jedi.org
← →
TButton © (2004-03-27 23:24) [14]
Вот-вот, а как же мне нарисовать его исходя из текужей темы?
TButton © (27.03.04 22:34)
> отстаньте от меня!
Я к Вам и не приставал.
> он везде одинаковый рельефная горизонтальная полосочка!
Показать своё незнание никогда не поздно.
http://menusmenus.narod.ru/sep.htm
Рыдайте дальше.
слышь, ты че тут самый умный? че ж ты умный вопрос нормально сформулировать не можешь? смею заметить, что жаде в приведенном вами примере (http://menusmenus.narod.ru/sep.htm) разделитель в меню выглядит "рельефная горизонтальная полосочка". а измываться над пожилым человеком - стыдно (по крайней мере должно быть)
← →
KhazModan © (2004-03-27 23:32) [15]> TButton © (27.03.04 23:24)
> что жаде в приведенном вами примере (http://menusmenus.narod.ru/sep.htm) разделитель в меню выглядит "рельефная горизонтальная полосочка"
Наверное, у Вас проблемы со зрением...
Используйте magnify.exe.
Ну да ладно, а то сейчас оскорбления начнутся, а я сюда не для этого зашел.
> Игорь Шевченко © (27.03.04 23:19)
Но ведь TMenuItem этого при прорисовке не делает!
А разделитель рисуется такой, как надо.
← →
TButton © (2004-03-27 23:40) [16]>Используйте magnify.exe.
вы не поверите, именно так и сделал. действительно. вы были правы, приношу свои извинения.
← →
Игорь Шевченко © (2004-03-27 23:43) [17]KhazModan © (27.03.04 23:32)
> Но ведь TMenuItem этого при прорисовке не делает!
> А разделитель рисуется такой, как надо.
В XP с примененными темами делает именно так - рисование меню перехватывается менеджером тем, и он рисует разделитель в зависимости от примененной темы.
← →
TButton © (2004-03-27 23:46) [18]а кстати, почему менеджер рисование менюшки перехватывает, а checkbox"ы, radiobutton"ы и т.д. нет.
← →
KhazModan © (2004-03-27 23:50) [19]TButton © (27.03.04 23:40)
> приношу свои извинения
Извинения приняты :)
> Игорь Шевченко © (27.03.04 23:43)
А где это в Menus.pas?
В AdvancedDrawItem нет, или, по крайней мере, я не увидел.
← →
Игорь Шевченко © (2004-03-27 23:58) [20]TButton © (27.03.04 23:46)
Перехватывает...
KhazModan © (27.03.04 23:50)
> А где это в Menus.pas?
Это не в Menus.pas, это в операционной системе Windows...
← →
KhazModan © (2004-03-28 00:07) [21]> Это не в Menus.pas, это в операционной системе Windows...
Да, но как разделитель рисуется в VCL?
В AdvancedDrawItem я видел вывод Caption"a, ShortCut, рисование Bitmap"a, но рисования разделителя я не нашел.
Пожалуйста, объясните подробно мне непонятливому.
← →
Piter © (2004-03-28 00:39) [22]KhazModan (28.03.04 00:07) [21]
Да, но как разделитель рисуется в VCL?
Да не рисуется он там! Ты ведь должен понимать, что VCL это в основном надстройка над стандартными контролами Windows. И TMainMenu такая же надстройка, все свои стандартные элементы windows рисует сама, что хорошо. Ты просто говоришь ей - нарисуй меню, а она уже решает как (в зависимости от версии windows, установленных тем, настроек пользователя и т.д.)
P.S. А вопросы надо задавать нормально, а то
Как можно нарисовать разделитель меню?
хоть бы сказал, что хочешь нарисовать на форме такой же разделитель как в меню
← →
KhazModan © (2004-03-28 00:48) [23]Piter © (28.03.04 00:39)
> Ты просто говоришь ей - нарисуй меню
Сказал. В микрофон. Не нарисовала :)))
А если серъезно, то КАК сказать это винде?
Неужели четко сформулированный ответ(в стиле ответов ЮЗ) мне никто не даст?
Все нужно клещами вытягивать...
> P.S. А вопросы надо задавать нормально, а то
>> Как можно нарисовать разделитель меню?
> хоть бы сказал, что хочешь нарисовать на форме такой же разделитель как в меню
Сегодня я хочу на форме, а завтра на Destop"e захочу нарисовать.
Где - это дело хозяйское.
А вопрос заключался в том, как же его нарисовать. И был поставлен достаточно корректно.
← →
Игорь Шевченко © (2004-03-28 01:04) [24]
> Да, но как разделитель рисуется в VCL?
Никак он там не рисуется, его рисование возлагается на Windows.
В своих меню с OwnerDraw он может рисоваться, например так:
const BLANK_LINE = "-";
procedure TForm1.MyDrawItem(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
.....
MenuItem := Sender as TMenuItem;
Text := MenuItem.Caption;
......
// Draw any separator lines
if (Text = BLANK_LINE) then begin
// Draw the Vertical Bar
VerticalRect := ARect;
Dec(VerticalRect.Top, SideBuffer);
VerticalRect.Right := VerticalWidth;
Inc(VerticalRect.Bottom, SideBuffer);
ACanvas.Brush.Color := VerticalColor;
ACanvas.FillRect(VerticalRect);
// Draw the Blank Line
ACanvas.MoveTo(VerticalWidth,ARect.Top+(ARect.Bottom - ARect.Top) div 2);
ACanvas.LineTo(ARect.Right,ARect.Top+(ARect.Bottom - ARect.Top) div 2);
Exit;
end;
.....
← →
Mihey © (2004-03-28 01:07) [25]>А вопрос заключался в том, как же его нарисовать. И был поставлен достаточно корректно.
Ответ скрыт в коде Windows. Как Windows рисует - неизвестно. Сторонние разработчики когда делают темы для своих меню, рисуют всё заново своими способами, пытаясь сделать так, чтобы меню выглядело как в какой-либо теме.
В общем и целом:
Для Win 95-98 нужно рисовать линиями исходя из системных цветов (какие из них определяют - несложно определить самому опытным путём, меняя цветовую тему). Для Win XP нужно рисовать через тему (наверняка в теме есть составные части, из которых строится меню). Отдельной процедуры рисования сепаратора НЕТ.
← →
KhazModan © (2004-03-28 12:50) [26]Всем спасибо.
← →
TButton © (2004-03-28 19:01) [27]re [20]
незаметно. как у меня был чекбокс в стиле win98 так и остался. т.самое с TSpeedButton.
← →
Игорь Шевченко © (2004-03-28 19:46) [28]
> т.самое с TSpeedButton
Про SpeedButton никто не знает.
Про CheckBox - манифест включил ? CheckBox стандартный ?
← →
TButton © (2004-03-28 20:06) [29]чекбокс стандартный, дельфи 5, манифестом неотягощенная.
← →
К.С. (2004-03-28 20:32) [30]Все много разглагольствуют, НО на самом то деле как уже было сказоно caption:="-", так и есть, после этого разделитель рисуеся АВТОМАТИЧЕСКИ!!!
← →
Думкин © (2004-03-28 21:15) [31]> [30] К.С. (28.03.04 20:32)
Автоматически - не значит по волшебству. И люди не разглогольствуют, а вполне конкретную вещь обсуждают, долго - но выяснение вопроса было долгим.
← →
Piter © (2004-03-28 21:39) [32]К.С. (28.03.04 20:32) [30]
Все много разглагольствуют, НО на самом то деле как уже было сказоно caption:="-", так и есть, после этого разделитель рисуеся АВТОМАТИЧЕСКИ!!
ПРАВДА? Ой блин...а мы тут ламеры рассуждаем о чем-то...
а если у формы Caption:="-" - то там по середине формы тоже разделитель рисуется? Черт побери, век живи - век учись...
← →
Игорь Шевченко © (2004-03-28 21:54) [33]TButton ©
> манифестом неотягощенная.
Помести рядышком с программой текстовый файл с именем
моя_прога.exe.manifest (вместо моя_прога - реальное имя)
с таким вот содержимым:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="Igor.Schevchenko.Manifest"
type="win32"
/>
<description>XP manifest for common controls test</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
← →
Dmyk (2004-03-28 21:59) [34]Если надо, чтобы в дельфи 5 чекбоксы рисовались в ХРшном стиле, можно самому создать файл с манифестом и вставиться его с помощью директивы {$R ...}. Правда, этот самый манифест надо в интернете искать, а вообще это обычный xml документ...
← →
TButton © (2004-03-28 22:08) [35]re 33
большое спасибо.
← →
Gero © (2004-03-28 22:20) [36]> Правда, этот самый манифест надо в интернете искать
Уже нашли.
http://delphimaster.net/view/1-1080400629/
33-й пост.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.6 MB
Время: 0.031 c