Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 210
от 15.08.2005, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 223, Экспертов: 41
В номере:Вопросов: 2, Ответов: 5


Вопрос № 24702: Доброго времени суток, уважаемые! Подскажите пожалуйста как выделить какой-либо пункт меню каймой красного цвета (меню уже раскрыто)? В приложении пример как я выделяю любой контрол, однако не могу определить экранные координаты пункта меню....
Вопрос № 24709: Здравствуйте, уважаемые эксперты. Подскажите, пожалуйста, у меня никак не получается: 1. Как найти все ListBox, имя которых начинается с "MyList_" ? 2. Можно ли менять цвет текста в TStatusBar ? Заранее бол...

Вопрос № 24.702
Доброго времени суток, уважаемые!
Подскажите пожалуйста как выделить какой-либо пункт меню каймой красного цвета (меню уже раскрыто)?
В приложении пример как я выделяю любой контрол, однако не могу определить экранные координаты пункта меню.
Надеюсь, понятно изложил... Благодарю за внимание!

Приложение:

Отправлен: 10.08.2005, 13:06
Вопрос задал: Zubex (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>>

Отвечает: Ерёмин Андрей
Здравствуйте, Zubex!
Для того, чтобы иметь возможность самостоятельно отрисовывать пункты меню, нужно установить для этого меню тип OwnerDraw. После этого в событии OnDrawItem можно делать всё, что угодно. Рисовать - как на обычном TCanvas. Событию передаётся параметр Rect (или ARect - точно не помню), в котором хранится прямоугольный участок для данного пункта меню. Вот примерно то, что Вам нужно там написать:

if (odSelected in State) Then
Begin
Menu.Canvas.Brush.Style:=bsClear;
Menu.Canvas.Pen.Color:=clRed;
Menu.Canvas.Rect(Rect);
End;

Если у стандартного меню нет возможности изменения типа (точно не помню, возможно действительно нет) и нет такого события, то следует воспользоваться менюшками из JediVCL. Удачи!
--
С уважением,
Андрей.

---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 10.08.2005, 17:52


Вопрос № 24.709
Здравствуйте, уважаемые эксперты.
Подскажите, пожалуйста, у меня никак
не получается:

1. Как найти все ListBox, имя которых
начинается с "MyList_" ?
2. Можно ли менять цвет текста в TStatusBar ?

Заранее большое спасибо.
Отправлен: 10.08.2005, 14:49
Вопрос задал: Гусев Сергей (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>>

Отвечает: Rusland
Здравствуйте, Гусев Сергей!
1. Смотри пример ниже - поиск компонента
2. Со стандартной панелью можно менять только размер, вид шрифта. Советую использовать компонент из набора LMD LMDStatusBar.
Удачи.

Приложение:

---------
Тише едешь, дальше будешь... от того места куда едешь

Ответ отправил: Rusland (статус: Студент)
Отправлен: 10.08.2005, 15:12

Отвечает: Zubex
Здравствуйте, Гусев Сергей!
1. См предыдущий ответ;
2. Можно сделать следующее:
в StatudBar`е создать панель, присвоить ей свойство
StatusBar.Panels[0].style="psOwnerDraw;" далее см. в приложении...

Приложение:

Ответ отправил: Zubex (статус: 1-ый класс)
Отправлен: 10.08.2005, 16:48

Отвечает: Tsechoev Bagaudin
Здравствуйте, Гусев Сергей!
Вопрос 1.
Вот не оптимизированный метод, не было на это времени, но это работает:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i:=0 to self.ControlCount-1 do
begin
if CompareStr(Copy(self.Controls[i].Name,1,7),'MyList_') = 0 then // если сравнение нужно без учета регистра, то используй CompareText
showMessage(self.Controls[i].Name);
end;
end;

Вопрос 2:
Я компоненту такого рода еще не встречал, а если создавать самому, то долго возиться.
Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: 10-ый класс)
Отправлен: 10.08.2005, 17:00

Отвечает: Ерёмин Андрей
Здравствуйте, Гусев Сергей!
1. Воспользуйтесь массивом Components формы, на которой данные TListBox расположены.
Вот код, который во все TListBox, расположенные на форме Form1 и имя которых начинается с "MyList_", добавляет строку "Hello!":


procedure TForm1.Button1Click(Sender: TObject);
Var I: Integer;
begin
For I:=0 To Form1.ComponentCount-1 Do
If (Form1.Components[I].ClassName = 'TListBox')
And (Pos('MyList_',Form1.Components[I].Name) > 0) Then
TListBox(FindComponent(Form1.Components[I].Name)).Items.Add('Hello!');
end;


2. В стандартном TStatusBar - нет. Причина заключается в том, что этот компонент отрисовывает Windows и использует системные цвета. Чтобы выводить цветной текст, воспользуйтесь сторонними компонентами, например StatusBar Pro или из набора JediVCL.

Удачи!
--
С уважением,
Андрей.

---------
Если б не было бы глюка, жизнь была б такая скyка...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 10.08.2005, 17:52


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное