Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#16: 2013-05-02 22:46:27 ЛС | профиль | цитата
nesco, не гони пургу
Если я тебе говорю, что
картинки никто вообще не устанавливал
-- значит я код посмотрел таки.

Посмотри и ты, и попробуй опровергнуть
------------ Дoбавленo в 22.46:
Зато я умею Читать коды
карма: 9

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#17: 2013-05-02 23:05:14 ЛС | профиль | цитата
Galkov писал(а):
значит я код посмотрел таки

По дефолту картинки там там действительно никто не устанавливал, только при добавлении пункта, это я тоже знаю. Но проблема-то не в этом, а в том, что они неправильно отображаются в разных системах. Это немного разные вещи. Последние схемы построены именно на принципе добавления пунктов извне вместе с картинками. Я так думаю, сделать, чтобы они добавлялись по вызову проблем не должно составить
карма: 22

0
Ответов: 9906
Рейтинг: 351
#18: 2013-05-02 23:08:17 ЛС | профиль | цитата
Кстати говоря, а что это за шулерство с подменой примера

ТС - вообще не обсуждаем, ввиду бессмысленности этого мероприятия.
Но Tad Вам дал пример, и сказал, что картинок нет.

Как надо назвать человека, который выкладывает иной пример, и рвет рубаху на груди: "Не понимаю тебя! Работает же все!"
По-моему -- жуликом

------------ Дoбавленo в 23.08:
nesco писал(а):
Но проблема-то не в этом

Проблема в этом:
Tad писал(а):
Если ты такой умный, то скажи в чем проблема - почему нет иконок в выпадающем по ПКМ меню ?
code_30921.txt

и, как минимум, достойная решения.
По словам Tad-а - "если вы все там такие умные"
карма: 9

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#19: 2013-05-02 23:11:36 ЛС | профиль | цитата
Galkov писал(а):
Проблема в этом:

Ну да, есть эта проблема, оспаривать ее не будем. Ну что делать с неправильным отображением
------------ Дoбавленo в 23.11:
Galkov писал(а):
Но Tad Вам дал пример, и сказал, что картинок нет

Ну, вообще-то никто и не обещал ему картинок по вызову меню
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#20: 2013-05-02 23:17:56 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2017-06-15 02:41:15
карма: 0

0
Ответов: 9906
Рейтинг: 351
#21: 2013-05-02 23:27:29 ЛС | профиль | цитата
Того, кто первый подменил тему обсуждения
Заменил "нет иконок" на "все работает же". И перешли к плавному обсуждению теней
А, вообще-то, иконок как не было, так и нет.

Аноним, в общем. Может потому и аноним, чтобы прямо не сказали КТО.
------------ Дoбавленo в 23.27:
nesco писал(а):
Ну, вообще-то никто и не обещал ему картинок по вызову меню

Ну вообще-то спросили почему их нет.
А не про плохие/хорошие тени...
карма: 9

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#22: 2013-05-02 23:31:37 ЛС | профиль | цитата
Galkov писал(а):
Ну вообще-то спросили почему их нет

Это поправимо. А вот отображение в разных системах оставляет желать лучшего
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#23: 2013-05-02 23:32:30 ЛС | профиль | цитата
nesco писал(а):
Ну, вообще-то никто и не обещал ему картинок по вызову меню
А это что ?
popupmenu.jpg
Это вид в XP SP3
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1popupmenu.jpg [20.3KB] [377]
Ответов: 9906
Рейтинг: 351
#24: 2013-05-02 23:44:56 ЛС | профиль | цитата
Tad, ты бы яснее высказывал свою позицию (молодежь в уме складывать 2 и 2 уже не умеет)
Жванецкий писал(а):
Уже не в очках дело. Пусть скажут: они есть, или их - нет

карма: 9

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#25: 2013-05-02 23:45:13 ЛС | профиль | цитата
Tad писал(а):
А это что ?

Оно не могло работать физически, не предусмотрено это было (к тому же, твой рисунок не видно совсем). Оно работало только при добавлении пункта. Об чем Galkov и говорил. Я вот только сейчас исправил это дело и обновил на SVN
карма: 22

0
Ответов: 9906
Рейтинг: 351
#26: 2013-05-02 23:45:58 ЛС | профиль | цитата
Tad, так как там с иконками: они есть, или их - нет
карма: 9

0
Разработчик
Ответов: 26155
Рейтинг: 2127
#27: 2013-05-02 23:48:33 ЛС | профиль | цитата
Galkov писал(а):
Так как там с иконками: они есть, или их - нет

В Win7 прозрачность отрабатывает только на 32-х битных bmp, любое другое не катит на прозрачность
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#28: 2013-05-02 23:50:20 ЛС | профиль | цитата
nesco писал(а):
Оно не могло работать физически, не предусмотрено это было.
Ну блин, даешь. Оно всю жизнь работало по вызову и картинки были и есть. У меня на компе с ХР работает. И картинки есть. Правда там HiAsm обновлялся года три тому назад.
Я выше привел и схему и картинку с экрана по ПКМ.

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26155
Рейтинг: 2127
#29: 2013-05-02 23:58:49 ЛС | профиль | цитата
Tad писал(а):
Правда там HiAsm обновлялся года три тому назад

Ну ты видимо забыл, что его правили. Вопрос тогда стоял запустить отрисовку меню системными ресурсами, а не самим по onDraw, уже и не помню, кто это просил.
Короче, надо проверить вот этот код на XP в плане отрисовки прозрачности

unit hiPopupMenu;

interface

uses Windows,Kol,Share,Messages,Debug;

type
THIPopupMenu = class(TDebug)
private
PM:PMenu;
FC:PControl;
Old:TOnMessage;
FMenuList: string;
ListMenuStr: array of string;

procedure SetMenu(const Value:string);
procedure AddMenuItem(const Caption:string);
// function _OnDraw( Sender: PObj; DC: HDC; const Rect: TRect; ItemIdx: Integer;
// DrawAction: TDrawAction; ItemState: TDrawState ): Boolean;
function _OnMes( var Msg: TMsg; var Rslt: Integer ): Boolean;
procedure RefBMP;
procedure RefBMPall;

procedure Init;
public
_prop_TranspIcon:boolean;
_event_onClick:THI_Event;
_event_onSelectStr:THI_Event;
_event_onEndPopup:THI_Event;
_data_Bitmaps:THI_Event;

property _prop_Menu: string write SetMenu;

constructor Create(Control:PControl);
destructor Destroy; override;
procedure _work_doPopup(var _Data:TData; Index:word);
procedure _work_doPopupHere(var _Data:TData; Index:word);
procedure _work_doAddItem(var _Data:TData; Index:word);
procedure _work_doClear(var _Data:TData; Index:word);
procedure _var_Handle(var _Data:TData; Index:word);
// property _prop_Menu:string write SetMenu;
end;

implementation

constructor THIPopupMenu.Create;
begin
inherited Create;
FC := Control;
old := FC.OnMessage;
// PM := NewMenu(nil,0,[],nil);
end;

{$ifdef F_P}
var ListMenu: array[0..200] of PChar;
{$endif}

procedure THIPopupMenu.Init;
type TPCharArray = array[0..0] of PChar;
// PPCharArray = ^TPCharArray;
var i:integer;
List:PStrList;
{$ifndef F_P}
ListMenu: array of PChar;
{$endif}
//k:PPCharArray;
begin
List := NewStrList;
List.text := FMenuList;
if List.Count > 0 then
begin
SetLength(ListMenuStr,List.Count);
{$ifndef F_P}
SetLength(ListMenu,List.Count);
{$endif}
//getmem(k,4*10);
for i := 0 to List.Count-1 do
begin
ListMenuStr[i] := List.Items[i];
ListMenu[i] := PChar(@ListMenuStr[i][1]);
//k[i] := PChar(ListMenuStr[i]);
end;
end;
if Assigned(PM) then PM.free;
PM := NewMenu( nil, 0, ListMenu, nil );
List.free;
end;


(*
procedure THIPopupMenu.Init;
var List:PStrList;
i:integer;
begin
List := NewStrList;
List.text := _prop_Menu;
for i := 0 to List.Count-1 do
AddmenuItem(List.Items[i]);
List.Free;
end;
*)

destructor THIPopupMenu.Destroy;
begin
FC.OnMessage := old;
PM.Free;
inherited;
end;

function THIPopupMenu._OnMes;
var m:PMenu;
begin
case Msg.message of
WM_COMMAND: begin
m := PM.Items[Msg.WParam];
if m <> nil then begin
_hi_OnEvent(_event_onSelectStr,PM.Items[PM.IndexOf(m)].Caption);
_hi_OnEvent(_event_onClick,PM.IndexOf(m));
end;
end;
end;
Result := Old(Msg,Rslt);
end;

procedure THIPopupMenu.AddMenuItem;
begin
if Caption = '-' then
PM.AddItem('-',nil,[moSeparator])
else
PM.AddItem(PChar(Caption),nil,[]);
Refbmp;
end;

procedure THIPopupMenu.RefBMP;
var dt,Ind:TData;
bmp:PBitmap;
arr:PArray;
i,j:integer;
c:TColor;
begin
Arr := ReadArray(_data_Bitmaps);
if Arr = nil then exit;
Ind := _DoData(PM.Count-1);
Arr._Get(Ind,dt);
bmp := PBitmap(dt.idata);
if (_IsBitmap(dt)) and (bmp <> nil) and not bmp.Empty then begin
// BmpTransparent(bmp);
if _prop_TranspIcon then begin
c := Bmp.Pixels[0,0];
for i := 0 to Bmp.Width-1 do
for j := 0 to Bmp.Height-1 do
if Bmp.Pixels[i,j] = c then
// Bmp.Pixels[i,j] := clMenu;
Bmp.Pixels[i,j] := clNone;
end;
PM.Items[PM.Count-1].BitmapItem := CopyImage(bmp.Handle,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
end;
end;

procedure THIPopupMenu.RefBMPall;
var dt,Ind:TData;
bmp:PBitmap;
arr:PArray;
i,j,k:integer;
c:TColor;
begin
Arr := ReadArray(_data_Bitmaps);
if Arr = nil then exit;

for k := 0 to min(Arr._Count - 1, PM.Count - 1) do
begin
Ind := _DoData(k);
Arr._Get(Ind,dt);
bmp := PBitmap(dt.idata);
if (_IsBitmap(dt)) and (bmp <> nil) and not bmp.Empty then
begin
if _prop_TranspIcon then
begin
c := Bmp.Pixels[0,0];
for i := 0 to Bmp.Width-1 do
for j := 0 to Bmp.Height-1 do
if Bmp.Pixels[i,j] = c then
// Bmp.Pixels[i,j] := clMenu;
Bmp.Pixels[i,j] := clNone;
end;
PM.Items[k].BitmapItem := CopyImage(bmp.Handle,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
end;
end;
end;

procedure THIPopupMenu.SetMenu;
begin
FMenuList := Value;
Init;
FC.OnMessage := _OnMes;
end;

(*
function THIPopupMenu._OnDraw;
var bmp:PBitmap;
begin // debug('ok');
bmp := NewBitmap(0,0);
bmp.Handle := Pm.ItemBitmap[ItemIdx];
bmp.Draw(dc,1,Rect.Top);
//with PM.Items[PM.Count-1]^ do
// TextOut(dc,Rect.Left + 18,Rect.Top,PChar(Caption),Length(Caption));
bmp.Handle := 0;
bmp.Free;
Result := true;
end;

*)

procedure THIPopupMenu._work_doPopup;
var pos:cardinal;
begin
pos := Cardinal(ToInteger(_data));
RefBMPall;
TrackPopupMenu(PM.Handle,0,pos and $ffff,pos shr 16,0,FC.Handle,nil);
_hi_OnEvent(_event_onEndPopup);
end;

procedure THIPopupMenu._work_doAddItem;
begin
AddMenuItem(ToString(_Data));
end;

procedure THIPopupMenu._work_doClear;
begin
if Assigned(PM) then PM.Free;
PM := NewMenu(nil,200,[],nil);
end;

procedure THIPopupMenu._work_doPopupHere;
var pos:TPoint;
begin
GetCursorPos(pos);
SetForegroundWindow( FC.Handle );
RefBMPall;
with pos do
TrackPopupMenu(PM.Handle,0,x,y,0,FC.Handle,nil);
_hi_OnEvent(_event_onEndPopup);
end;

procedure THIPopupMenu._var_Handle;
begin
dtInteger(_Data,PM.ItemHandle[0]);
end;

end.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#30: 2013-05-03 00:24:38 ЛС | профиль | цитата
tadsmenu.png
немножко похулиганил в схеме Tad
Это твой код (с clBlack) под XP, и, в отличие от Tad-а, курсор с "прицела не снимал"

------------ Дoбавленo в 00.12:
Меня, как истинного аскета, устроили бы иконки 16x16 в поле unchecked (системными ресурсами)
Типа, аскетизм - как стиль жизни... Ну ты помнишь
И, конечно, размер массива картинок, совпадающий с размером меню - напрягает


------------ Дoбавленo в 00.24:
Как говорится, осталось совсем немного.
Добавить какие-нибудь магические буквы в текст Menu, определяющие индекс из массива иконок (а может и место - Item/Checked/Unchecked)

Сделать то же самое в MainMenu - и начать все причесывать, чтобы этот код жил в веках...
И будет жить ведь

карма: 9

0
файлы: 1tadsmenu.png [9.2KB] [435]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)