Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странные символы & в PopupMenu


Ольга ©   (2004-12-13 11:01:00) 

Создаю PopupMenu динамически. Пункты меню читаю из базы (соединяю 3 поля типа varchar).
Если PopupMenu.OwnerDraw:=False, то все ОК. Получаю менюшку:

ИС 1.1 (-Р макс)
ИС 1.2 (+Р мин)
...

Но мне нужно вывести пункты меню разным цветом. Делаю PopupMenu.OwnerDraw:=True, пишу на onDrawItem обработку - получаю разноцветное меню, но с символами &:

ИС &1.1 (-Р макс)
ИС 1.&2 (+Р мин)
...

Откуда эти & беруться и как с ними бороться?

На всякий случай привожу код:

procedure TFMain.FormActivate(Sender: TObject);
var Cause: TADOQuery;
   mi: TMenuItem;  
   mystr: String;
begin

 // Связь с БД, открытие Cause
 // Формирование PopupMenu

   While not Cause.Eof do    
   begin
     mystr:=Trim(Cause.FieldByName('CauseGroup').AsString)+'   '+
            Trim(Cause.FieldByName('number').AsString)+'  '+
            Trim(Cause.FieldByName('SmallName2').AsString);

     mi:=TMenuItem.Create(self);
     Popup.Items.Add(mi);
     Popup.Items[i].Tag:=Cause.FieldByName('ID').AsInteger;
     Popup.Items[i].Caption:=mystr;
     Popup.Items[i].OnClick:=N1Click;
     Popup.Items[i].OnDrawItem:=N1DrawItem;
     inc(i);
     Cause.Next;
   end;
end;

procedure TFMain.N1DrawItem(Sender: TObject; ACanvas: TCanvas;
 ARect: TRect; Selected: Boolean);

begin
     if (Sender as TMenuItem).Tag < 8 then
          ACanvas.Font.Color:=clred
     else ACanvas.Font.Color:=clblue;
     ACanvas.TextOut(ARect.Left+2, ARect.Top+2,(Sender as TMenuItem).Caption);

end;


Ольга   (2004-12-13 12:11:00) [1]

В базе & нет.
А AutoHotkeys = maManual сработало (ох, уж мне этот навязчивый сервис...)
Спасибо!


Юрий Зотов   (2004-12-13 12:09:00) [2]

ACanvas.TextOut(ARect.Left + 2, ARect.Top + 2,
  StripHotKey((Sender as TMenuItem).Caption));


KSergey   (2004-12-13 11:54:00) [3]

Подозреваю, что эти самые & записаны в БД.
Это стандартные вещи обрабатываемые Win - после них символ подчеркивается и считается "горячей клавишей2 для этого пункта. Видимо, вам в отрисовывальщике необходимо добавит ьтакую функциональность либо вовсе отказаться от возможности горячих клавишь и выкинуть эти символы из БД.


stone   (2004-12-13 11:54:00) [4]

Поставь AutoHotkeys = maManual


Наверх

Титульная страница Поиск, карта сайта Написать письмо