Форум: "WinAPI";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c