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

Вниз

Tooltips в Toolbar под XP.   Найти похожие ветки 

 
Владислав ©   (2003-11-27 10:16) [0]

Приветствую, Мастера.

Ситуация такая.

Создаю ToolBar в Outlook Express:

procedure TOEToolBar.CreateToolBar;
begin
if FToolBarInserted or (FReBarWindow32Handle = 0) then Exit;
if not GetTrialExpired then
FToolBarHandle :=
CreateToolbarEx(
FReBarWindow32Handle,
OEToolBarStyle,
ToolBarID,
1,
HInstance,
1000,
@ToolBarButtons,
ToolBarButtonsCount,
16,
16,
16,
16,
SizeOf(TTBButton))
else
FToolBarHandle :=
CreateToolbarEx(
FReBarWindow32Handle,
OEToolBarStyle,
ToolBarID,
1,
HInstance,
1000,
@TrialToolBarButtons,
TrialToolBarButtonsCount,
16,
16,
16,
16,
SizeOf(TTBButton));

if FToolBarHandle = 0 then Exit;

FillChar(FReBarBandInfo, SizeOf(TReBarBandInfo), #0);
with FReBarBandInfo do
begin
cbSize := SizeOf(TReBarBandInfo);
fMask := {RBBIM_COLORS or }RBBIM_TEXT or {RBBIM_BACKGROUND or}
RBBIM_STYLE or RBBIM_CHILD or RBBIM_CHILDSIZE or
RBBIM_SIZE or RBBIM_ID or RBBIM_HEADERSIZE;
fStyle := RBBS_CHILDEDGE or RBBS_FIXEDBMP or RBBS_BREAK;
lpText := BandText;
cch := BandTextSize;
wID := BandID;
hwndChild := FToolBarHandle;
cxMinChild := 24;
cyMinChild := 22;
cx := 110;
cxHeader := 110
end;

FBandNumber := SendMessage(FReBarWindow32Handle, RB_INSERTBANDA,
WPARAM(-1), LPARAM(@FReBarBandInfo));

FToolBarInserted := True

{$IFDEF DEBUG_PLUGIN}
;Debug(DebugOutputFile, "Toolbar is created", [])
{$ENDIF}
end;


Структуры и стиль такие:

ToolBarButtons: TOEToolBarButtons =
(
(iBitmap: 0; idCommand: IDM_CLEAN_INBOX; fsState: TBSTATE_ENABLED;
fsStyle: TBSTYLE_BUTTON; dwData: 0; iString: -1),
(iBitmap: 0; idCommand: 0; fsState: 0;
fsStyle: TBSTYLE_SEP; dwData: 0; iString: -1),
(iBitmap: 6; idCommand: IDM_ADD_FRIEND; fsState: TBSTATE_ENABLED;
fsStyle: TBSTYLE_BUTTON; dwData: 0; iString: -1),
(iBitmap: 1; idCommand: IDM_MANAGE_FRIENDS; fsState: TBSTATE_ENABLED;
fsStyle: TBSTYLE_BUTTON; dwData: 0; iString: -1),
(iBitmap: 0; idCommand: 0; fsState: 0;
fsStyle: TBSTYLE_SEP; dwData: 0; iString: -1),
{ (iBitmap: 5; idCommand: IDM_ADD_FILTER; fsState: TBSTATE_ENABLED;
fsStyle: TBSTYLE_BUTTON; dwData: 0; iString: -1),}
(iBitmap: 2; idCommand: IDM_MANAGE_FILTERS; fsState: TBSTATE_ENABLED;
fsStyle: TBSTYLE_BUTTON; dwData: 0; iString: -1),
(iBitmap: 0; idCommand: 0; fsState: 0;
fsStyle: TBSTYLE_SEP; dwData: 0; iString: -1),
(iBitmap: 3; idCommand: IDM_OPTIONS; fsState: TBSTATE_ENABLED;
fsStyle: TBSTYLE_BUTTON; dwData: 0; iString: -1)
);

TrialToolBarButtonsCount = 1;
TrialToolBarButtons: TTrialOEToolBarButtons =
(
(iBitmap: 4; idCommand: IDM_ABOUT; fsState: TBSTATE_ENABLED;
fsStyle: TBSTYLE_BUTTON; dwData: 0; iString: -1)
);

OEToolBarStyle =
Longint(
WS_CHILD or WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or
TBSTYLE_FLAT or TBSTYLE_TOOLTIPS or TBSTYLE_TRANSPARENT or
TBSTYLE_WRAPABLE or
CCS_TOP or CCS_NORESIZE or CCS_NOPARENTALIGN or CCS_ADJUSTABLE or
CCS_NODIVIDER or
WS_EX_LEFT or WS_EX_LTRREADING or WS_EX_RIGHTSCROLLBAR
);


Оконная процедура родителя тулбара:

function ReBarWindow32SubclassProc(hWnd: HWND; Msg: UINT;
wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
Hint: string;
begin
try

{$IFDEF DEBUG_PLUGIN}
Debug(DebugOutputFile,
"ReBarWindow32 subclass procedure is called. " +
"hWnd 0x%.8x, Msg 0x%.8x, wParam 0x%.8x, lParam 0x%.8x",
[hWnd, Msg, wParam, lParam]);
{$ENDIF}

Result := CallWindowProc(@OEToolBar.FOriginReBarWindow32Proc, hWnd, Msg,
wParam, lParam);
case Msg of
WM_NOTIFY:
if OEToolBar.FToolBarInserted then
begin
with PToolTipText(lParam)^ do
begin
if hdr.code = TTN_NEEDTEXT then
begin
case hdr.idFrom of
IDM_CLEAN_INBOX: Hint := rsHINT_CLEAN_INBOX;
IDM_ADD_FRIEND: Hint := rsHINT_ADD_FRIEND;
IDM_MANAGE_FRIENDS: Hint := rsHINT_MANAGE_FRIENDS;
IDM_ADD_FILTER: Hint := rsHINT_ADD_FILTER;
IDM_MANAGE_FILTERS: Hint := rsHINT_MANAGE_FILTERS;
IDM_OPTIONS: Hint := rsHINT_OPTIONS;
IDM_HELP: Hint := rsHINT_HELP;
IDM_SA_ON_THE_WEB: Hint := rsHINT_SA_ON_THE_WEB;
IDM_PRODUCT_SALES: Hint := rsHINT_PRODUCT_SALES;
IDM_CUSTOMER_SERVICE: Hint := rsHINT_CUSTOMER_SERVICE;
IDM_ABOUT: Hint := rsHINT_ABOUT
else
Hint := "";
end;
if Length(Hint) > 0 then
Move(PChar(Hint)^, szText, Length(Hint));
end
end;
end;
RB_INSERTBANDA:
if not OEToolBar.FToolBarInserted then
begin
Inc(BandCount);
if BandCount = 4 then
OEToolBar.CreateToolBar
end
end

except
{$IFDEF DEBUG_PLUGIN}
on E: Exception do
begin
{$ENDIF}

Result := 0

{$IFDEF DEBUG_PLUGIN}
;
Debug(DebugOutputFile,
"!!!!!!!!!! EXCEPTION IN TOOLBAR WINDOW PROCEDURE !!!!!!!!!!", []);
Debug(DebugOutputFile,
"!!!!!!!!!! Exception class: %s; Exception Message: %s !!!!!!!!!!",
[E.Message, E.ClassName]);
end
{$ENDIF}

end
end;


Проблема такая. Под всеми ОС, кроме Windows XP, хинты отображаются. Нужно это реализовать и под XP. В чем проблемы? Как это реализовать?


 
Владислав ©   (2003-11-28 09:20) [1]

Мастера, неужели никто не сталкивался с подобным поведением? Плиз ткните носом, что я неправильно делаю.



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

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

Наверх




Память: 0.47 MB
Время: 0.024 c
1-16350
Lisa
2004-01-24 12:08
2004.02.06
Работа с буфером обмена


4-16790
timon
2003-12-02 06:46
2004.02.06
Дискета


7-16756
Prof
2003-11-19 10:55
2004.02.06
Информация о компьютере.


3-16048
Pako
2004-01-12 11:27
2004.02.06
Insert


1-16305
SeS
2004-01-23 18:15
2004.02.06
Забор значений из файла