Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Рисование разделителя   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.035 c
1-1081079427
Serious Sam
2004-04-04 15:50
2004.04.18
Как сделать, чтобы приложение не отображалось на панели задач?


3-1079611948
CTAC
2004-03-18 15:12
2004.04.18
Конвертация типов полей


7-1077171519
atmospheric
2004-02-19 09:18
2004.04.18
Как зарегистровать свое расширение ?


7-1074855290
-=GaLaN=-
2004-01-23 13:54
2004.04.18
LockStation и PowerOff в NT4


3-1079688643
Romeo
2004-03-19 12:30
2004.04.18
Удаленный доступ к двум (и более) таблицам базы через DCOM