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

Вниз

избирательный OwnerDraw   Найти похожие ветки 

 
Katya   (2007-01-15 21:53) [0]

посмотрела все доки по способам изменения цвета и стиля шрифтов в ListView, MainMenu, поковыряла демку DemoMenuBitmap...
но остались вопросы...

у меня в проге есть собственное PopupMenu, создаваемое NewMenu(nil,0,[""],nil);
пункты добавляются посредством MyPopupMenu.AddItem(PChar(TmpStr),mySelectItem,[ ]);

как мне избирательно назначить для некоторых пунктов (чтобы выделить их жирненьким) function TMainForm.MyPopupMenuDrawItem(Sender: PObj; DC: HDC;
const Rect: TRect; ItemIdx: Integer; DrawAction: TDrawAction;
ItemState: TDrawState): Boolean; ????
чувствую, что ответ рядом, но не получается...

p.s. про MyPopupMenu.OwnerDraw := TRUE; знаю ;)


 
MTsv DN ©   (2007-01-15 22:12) [1]

> Katya, приведи минимальный код...

> p.s. про MyPopupMenu.OwnerDraw := TRUE; знаю ;)
Устанавливать надо для каждого элемента меню...


 
Psychedelic ©   (2007-01-15 23:40) [2]

Удалено модератором


 
Katya   (2007-01-16 14:41) [3]


// ТИПЫ

type
 {$IFDEF KOL_MCK}
 {$I MCKfakeClasses.inc}
 {$IFDEF KOLCLASSES} TForm1 = class; PForm1 = TForm1; {$ELSE OBJECTS} PForm1 = ^TForm1; {$ENDIF CLASSES/OBJECTS}
 {$IFDEF KOLCLASSES}{$I TForm1.inc}{$ELSE} TForm1 = object(TObj) {$ENDIF}
   Form: PControl;
 {$ELSE not_KOL_MCK}
 TForm1 = class(TForm)
 {$ENDIF KOL_MCK}
   KOLProject1: TKOLProject;
   KOLForm1: TKOLForm;
   PopupMenu1: TKOLPopupMenu;      
   KOLApplet1: TKOLApplet;

   procedure zSelectMyPopupItem(Sender: PMenu; Item: Integer);
   procedure zMyPopupCreate;
   procedure zMyPopupRefresh;

 // для вставки подменю
 PMenuAccess = ^TMenuAccess;
 TMenuAccess = object(TMenu)
 end;

// ПЕРЕМЕННЫЕ

var
 Form1 {$IFDEF KOL_MCK} : PForm1 {$ELSE} : TForm1 {$ENDIF} ;

 MyPopup   : PMenu;

{$IFDEF KOL_MCK}
procedure NewForm1( var Result: PForm1; AParent: PControl );
{$ENDIF}

implementation

{$IFNDEF KOL_MCK} {$R *.DFM} {$ENDIF}

{$IFDEF KOL_MCK}
{$I Unit1_1.inc}
{$ENDIF}

// ОБРАБОТЧИКИ

// Создание формы
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
 begin

   Form1.zMyPopupCreate;
   
 end;

// Создание меню
procedure TForm1.zMyPopupCreate;
 begin

   MyPopup := NewMenu(nil,0,[""],nil);

   PMenuAccess(MyPopup).FCaption := "Файлы";
   Form1.PopupMenu1.InsertSubMenu(PopupTerminator,2); // вторым пунктам
   // старая редакция - Form1.MyPopup.Caption := "Файлы";

   zMyPopupRefresh; // получение списка файлов и заполнение меню

 end;

// Обработчик событий этого меню
procedure TForm1.zSelectMyPopupItem(Sender: PMenu; Item: Integer);
 begin

 end;

// Заполнение/обновление меню
procedure TForm1.zMyPopupRefresh;
 begin

   hFile := FindFirstFileA(PChar(zCurrentDir + "*.dll"),WFD);
   if hFile <> INVALID_HANDLE_VALUE
      then // файл(ы) найден(ы)

           while FindNextFileA(hFile,WFD) do
                 begin

                   // имеем кол-во строк в MyPopup.Count

                   // получение списка имён и т.п.

                   // переименование существующих
                   MyPopup.ItemText[i] := CurrentItemName;

                   // добавление новых
                   MyPopup.AddItem(PChar(CurrentItemName),zSelectMyPopupItem,[ ]);
                                                         
                 end;

   FindClose(hFile);

 end;


 
AndreyRus   (2007-01-16 22:52) [4]

Удалено модератором


 
MTsv DN ©   (2007-01-21 17:55) [5]

2 Katya
Если честно, то я имел ввиду минимально-рабочий код...а не куски из MCK-проекта... Разбираться в твоем коде не стал.

Качай вот отсюда: http://www.uus4u.com/download/other/pm_choosenownerdraw.rar - "избирательный" OwnerDraw для PopUpMenu...

> Гы-ы. Жы-ырненьким :)
> Первый секс - Katya!
Ребята, по-моему - это Грубо!!!


 
Don ©   (2007-01-22 10:20) [6]

По поводу избирательного рисования для меню:
var
 idx: Integer;
 item: PMenu;
begin
 ...
 idx := MyPopup.AddItem(PChar(CurrentItemName), zSelectMyPopupItem, []);
 item := MyPopup.Items[idx];
 item.OwnerDraw := True;
 item.OnDrawItem := MyPopupDrawItem;
 ...
end;
попробуй так, хотя из кода не понял, зачем тебе избирательное рисование элементов меню.
И еще, твоя процедура zMyPopupRefresh или сильно порезана, или написана неправильно (не забывай, что вызов FindFirstFile уже дает указатель на первый файл, а ты его не обрабатываешь)


 
Katya   (2007-01-22 12:50) [7]

2MTsv DN, Don
cпасибо за помощь!
только приехала, вечером буду пробовать!!!

отдельно MTsv DN
на форуме как-то попался совет одного из уважаемых кодеров - не вываливать весь код, а давать только те части (куски), которые нужны для понимания ситуации
поэтому я так и сделала...

отдельно Don
верно, порезана - написание здесь кода, который роли в проблеме не играет только введет в заблуждение...

остальным
спасибо за поднятие настроения!
от блондинки с голубыми глазами и великолепными формами :Р


 
AndreyRus   (2007-01-22 23:09) [8]

Удалено модератором


 
Katya   (2007-01-23 10:55) [9]

2MTsv DN

вчера разбиралась
в указанном примере отрисовка применяется к статическому компоненту pm, а у меня в динамическом... не работает...
сегодня ещё буду пробовать, если не получится, ещё напишу!!!!!

2AndreyRus
;)


 
Psychedelic ©   (2007-01-23 11:47) [10]

Удалено модератором


 
Katya   (2007-01-23 22:21) [11]

ничего не выходит с динамическим подменю....

вот фрагмент кода (из примера pm_choosenownerdraw.rar)

type
 {$IFDEF KOL_MCK}
 {$I MCKfakeClasses.inc}
 {$IFDEF KOLCLASSES} TForm1 = class; PForm1 = TForm1; {$ELSE OBJECTS} PForm1 = ^TForm1; {$ENDIF CLASSES/OBJECTS}
 {$IFDEF KOLCLASSES}{$I TForm1.inc}{$ELSE} TForm1 = object(TObj) {$ENDIF}
   Form: PControl;
 {$ELSE not_KOL_MCK}
 TForm1 = class(TForm)
 {$ENDIF KOL_MCK}
   KOLProj: TKOLProject;
   KOLForm: TKOLForm;
   pm: TKOLPopupMenu;
   function pmDrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
     ItemIdx: Integer; DrawAction: TDrawAction;
     ItemState: TDrawState): Boolean;
   function pmMeasureItem(Sender: PObj; Idx: Integer): Integer;
   procedure KOLFormFormCreate(Sender: PObj);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 // для вставки подменю
 PMenuAccess = ^TMenuAccess;
 TMenuAccess = object(TMenu)
 end;

var
 Form1 {$IFDEF KOL_MCK} : PForm1 {$ELSE} : TForm1 {$ENDIF} ;

 MyPopup  : PMenu; // подменю

procedure TForm1.KOLFormFormCreate(Sender: PObj);
var
id: integer;
item: PMenu;
begin
pm.Items[1].OwnerDraw := true;

MyPopup := NewMenu(nil,0,[""],nil);
PMenuAccess(MyPopup).FCaption := "Вставка";
Form1.pm.InsertSubMenu(MyPopup,1);

MyPopup.AddItem("Item1",nil,[ ]);

id := MyPopup.AddItem("Item2",nil,[ ]);
item := MyPopup.Items[id];
item.OwnerDraw := true;
item.OnDrawItem := pmDrawItem;

end;


 
MTsv DN ©   (2007-01-23 23:35) [12]

Привет...

Замени:
procedure TForm1.KOLFormFormCreate(Sender: PObj);
var
id: integer;
item: PMenu;
begin
pm.Items[1].OwnerDraw := true;

MyPopup := NewMenu(nil,0,[""],nil);
PMenuAccess(MyPopup).FCaption := "Вставка";
Form1.pm.InsertSubMenu(MyPopup,1);

MyPopup.AddItem("Item1",nil,[ ]);

id := MyPopup.AddItem("Item2",nil,[ ]);
item := MyPopup.Items[id];
item.OwnerDraw := true;
item.OnDrawItem := pmDrawItem;

end;


на:
var
id : integer;
item: PMenu;
begin
pm.Items[1].OwnerDraw := true;

MyPopup := NewMenu(nil,0,[""],nil);
PMenuAccess(MyPopup).FCaption := "&#194;&#241;&#242;&#224;&#226;&#234;&#224;";
Form1.pm.InsertSubMenu(MyPopup,1);

MyPopup.AddItem("Item1",nil,[ ]);
id := MyPopup.AddItem("Item2",nil,[ ]);
pm.Items[MyPopup.ItemSubmenu[id]].OnDrawItem := pmDrawItem;
MyPopup.Items[id].OwnerDraw := true;
end;


 
Katya   (2007-01-24 12:26) [13]

привет

вчера добила ))
но решение несколько другое:

в обработчиках pm - OnDrawItem и OnMeasureItem
установлены pmDrawItem и pmMeasureItem (соответственно)

а для замены "дизайна" нужного (текущего) пункта после его инициализации (или переименования)
MyPopup.Items[Сгid].OwnerDraw := true;

работает :)



Страницы: 1 вся ветка

Текущий архив: 2007.09.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
3-1178640142
Empleado
2007-05-08 20:02
2007.09.09
А никто не использует TSQLMonitor (SqlExpr.pas)?


15-1187166270
Fin
2007-08-15 12:24
2007.09.09
Delphi 5 под vista


2-1187171569
gentos
2007-08-15 13:52
2007.09.09
Timage


15-1186513465
Cyrax
2007-08-07 23:04
2007.09.09
Проверка авторских прав на слово, составляющее доменное имя...


4-1174373132
maxistent
2007-03-20 09:45
2007.09.09
определитель номера