Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-1080505135
Diver
2004-03-29 00:18
2004.04.18
ComboBox


4-1076658166
Chery
2004-02-13 10:42
2004.04.18
Как переименовать папку?


7-1076337539
Makhanev A.S.
2004-02-09 17:38
2004.04.18
Как получить название приложения?


1-1080710558
Stas
2004-03-31 09:22
2004.04.18
MDI форма в DLL


3-1079604460
bushmen
2004-03-18 13:07
2004.04.18
update openrowset





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