Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];
ВнизЕщё раз о "подсказках" Найти похожие ветки
← →
Германн © (2010-11-05 02:10) [0]Всё думаю как наиболее снабдить юзера подсказками. С хинтами на статус баре справился. Но статус бар не безразмерный. Очень длинная подсказка (скорее даже это уже не подсказка, а объяснение что это такое) туда не влезет. Вспомнилась мне при этом стандартная фишка Микрософт "Что это такое". Фишка включает в себя кнопку со значком вопроса, курсор со стрелкой и значком вопроса, плюс особое всплывающее окно, которое показывается когда этим курсором щелкнешь на дочернем окне.
Вот сам вопрос. Эта технология как-то реализована? В виде WinAPI"шных функций. (О реализации в Дельфи я не слышал, но вдруг и она есть?)
Или всё нужно делать ручками?
Д2007
← →
Германн © (2010-11-05 02:24) [1]Да ещё поясню суть проблемы.
Данная программа будет бесплатной. (Т.е. конечно "условно-бесплатной", потому что она будет даваться тому, кто купил железо.) Значит хэлпа у этой программы никогда не будет.
← →
Anatoly Podgoretsky © (2010-11-05 08:36) [2]> Германн (05.11.2010 02:10:00) [0]
Руками с помощью АПИ
← →
Anatoly Podgoretsky © (2010-11-05 08:43) [3]Вот реализация на Дельфи.
Из архива писем.Hi Mavin!
There is simple example, w/o explanation (it need more time).
Put it in your code and use.
You need also create own help file and assign
context number to HelpContext of controls.
====== it put into Form declaration ======
protected
HelpControl: TWinControl;
function HelpEvent (Command:Word;
Data:Longint;
var CallHelp:Boolean):Boolean;
public
procedure WMHelp(var Message: TWMHelp); message WM_HELP;
...
====== it put into implementation part ======
procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.OnHelp := HelpEvent;
...
end; // FormCreate
procedure TMainForm.FormDestroy(Sender: TObject);
begin
Application.HelpCommand(HELP_QUIT,0);
...
end;
procedure TMainForm.WMHelp(var Message:TWMHelp);
var
Control: TWinControl;
begin
HelpControl := nil;
with Message.HelpInfo^ do begin
if Message.HelpInfo.iContextType = HELPINFO_WINDOW then begin
Control := FindControl(hItemHandle);
while (Control <> nil) and (Control.HelpContext = 0) do begin
Control := Control.Parent;
end;
if Control <> nil then begin
HelpControl := Control;
end;
end;
end;
inherited;
end; // WMHelp
function TMainForm.HelpEvent(Command:Word;
Data:Longint;
var CallHelp:Boolean):Boolean;
var
ARect: TRect;
APoint: TPoint;
begin
if Command = HELP_CONTEXTPOPUP then begin
if HelpControl <> nil then begin
GetCursorPos(APoint);
ARect := HelpControl.ClientRect;
ARect.TopLeft := HelpControl.ClientToScreen(ARect.TopLeft);
ARect.BottomRight :=
HelpControl.ClientToScreen(ARect.BottomRight);
if (APoint.x >= ARect.Left) and
(APoint.x <= ARect.Right) and
(APoint.y >= ARect.Top) and
(APoint.y <= ARect.Bottom) then Exit;
// the cursor is already over the control.
with HelpControl do begin
APoint := Point(Left + Width div 2,Top + Height div 2);
APoint := Parent.ClientToScreen(APoint);
end;
Application.HelpCommand(HELP_SETPOPUP_POS,
LongInt(PointToSmallPoint(APoint)));
end;
end;
end; // HelpEvent
================================================
You can find explanation and details under Help.
Sincerely yours
Anatoly Podgoretsky
← →
sniknik © (2010-11-05 10:19) [4]Anatoly Podgoretsky © (05.11.10 08:43) [3]
еще бы добавить вопрос в системные кнопки, для обычных, не диалоговых окон, и можно пользоваться.
полезная в принципе вещь, гораздо полезнее чем весь стиль "аэро" например (имхо конечно), но почему то неиспользуемая.
← →
sniknik © (2010-11-05 10:28) [5]> еще бы добавить вопрос в системные кнопки
в смысле, добавить то можно, но только такprocedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
with Params do begin
Style := Style and (not WS_MAXIMIZEBOX) and (not WS_MINIMIZEBOX);
ExStyle:= ExStyle or WS_EX_CONTEXTHELP;
end;
end;
но это как то "не кошерно"....
← →
Anatoly Podgoretsky © (2010-11-05 10:44) [6]> sniknik (05.11.2010 10:19:04) [4]
Я немного тебя не понимаю, ты о чем, если о заголовке окна, то это штатно
через BorderIcons
← →
sniknik © (2010-11-05 11:01) [7]> Я немного тебя не понимаю, ты о чем, если о заголовке окна, то это штатно
через BorderIcons
кнопка хелпа не совместима с минимизацией/развертыванием, т.е. можно только в "сингл" крестиком (как у диалоговых стандартно). у обычных окон (есть кнопки минимизации/...) не работает.
← →
Anatoly Podgoretsky © (2010-11-05 11:03) [8]Контекстная справка, предназначена только для окон со стилем DIALOG - ограничение Виндоус
← →
sniknik © (2010-11-05 11:15) [9]ну вот, я именно про это. т.к. мне это больше нужно на главной форме... там где по программе/элементам больше всего вопросов.
← →
Anatoly Podgoretsky © (2010-11-05 11:20) [10]> sniknik (05.11.2010 11:15:09) [9]
Я этим занимался очень давно, 13 и более лет назад и уже ничего не помню, но
мне как то удалось добиться и для обычной формы, но как не помню и проекта
того уже нет.
← →
sniknik © (2010-11-05 11:42) [11]на win98? может быть, сейчас? вряд ли ;о(.
а мелкософт вместо добавления действительно нормальных вещей только над интерфейсом "издевается". :(
← →
Anatoly Podgoretsky © (2010-11-05 12:08) [12]> sniknik (05.11.2010 11:42:11) [11]
А на чем еще я мог делать в 1995-1997 годах, не на НТ4 же.
← →
Германн © (2010-11-05 19:30) [13]
> Вот реализация на Дельфи.
Спасибо!
← →
Германн © (2010-11-06 01:38) [14]
> sniknik ©
Да. Без кнопки вопроса сей код малополезен, а без кнопок мин/мах некошерно.
Добавить свою кнопку слева от системных не проблема. А нельзя ли сказать винде, что эта кнопка контекстной справки?
А то ручками слишком сложно имитировать такое поведение.
← →
sniknik © (2010-11-06 01:57) [15]> Добавить свою кнопку слева от системных не проблема.
в висте/имн7 под стиль аэро/... ???
← →
Германн © (2010-11-06 02:05) [16]
> sniknik © (06.11.10 01:57) [15]
>
> > Добавить свою кнопку слева от системных не проблема.
> в висте/имн7 под стиль аэро/... ???
>
Не знаю. Не пробовал. Пока.
Висты у меня нет. Семерка триальная есть (правда 90 дней прошли, но обещанного часа для проверки должно бы хватить). Сщас попробую.
Стиль аэро как включить?
← →
sniknik © (2010-11-06 02:12) [17]где то в панели управления должна быть настройка экрана (как темы в свойствах экрана в XP, а может там тоже есть)...
я как то тоже без этих "супер операционок" обхожусь.
← →
Германн © (2010-11-06 02:14) [18]
> sniknik © (06.11.10 02:12) [17]
Сщас попробую.
← →
Германн © (2010-11-06 02:30) [19]В семёрке вызвал попап на десктопе. Выбрал "personalize". Затем выбрал одну из Aero themes. Кнопка жива.
Хотя да. Я понял тебя.
Ты хочешь делать стандартные окна. Т.е. вид этих окон определяется Виндой. У меня не стандартное окно, благодаря моему заказчику.
← →
Юрий Зотов © (2010-11-06 11:39) [20]Делал когда-то форму с любым сочетанием системных кнопок, включая и кнопку вопроса. Оформлена в виде пакета, который инсталлируется в IDE обычным образом, после чего в репозитории IDE (меню File-New-Form) появляется искомая форма. При нажатии на кнопку вопроса возникает событие, для которого надо только написать обычный обработчик. Кроме того, форма позволяет вставить в свой заголовок и любой контрол с окном системного класса BUTTON (это обычные кнопки, чекбоксы и пр.), причем никакого кода для этого писать не нужно, все делается через Инспектор Объектов.
Делал в D7, тестировал под W2K и XP. Работает нормально, могу выложить в исходниках. Но вряд ли будет корректно работать при использовании тем XP и тем более под W7 и Vista (да под ними даже и не тестировалось ни разу).
Если кому интересно и есть смысл выкладывать - отпишитесь здесь.
← →
DiamondShark © (2010-11-06 18:05) [21]
> sniknik © (05.11.10 10:28) [5]
> Anatoly Podgoretsky © (05.11.10 10:44) [6]
> sniknik © (05.11.10 11:01) [7]
А вам обязательно в заголовок?
Добавьте кнопку на тулбар, по нажатию кнопки посылайте
WM_SYSCOMMAND с параметром SC_CONTEXTHELP
Будет совсем как "Что это такое?"
← →
sniknik © (2010-11-06 19:13) [22]> А вам обязательно в заголовок?
"нам" обязательно стандартно. вот когда в обычном интерфейсе от ms войдут в моду кнопки на тулбаре аля "Что это такое?", тогда подумаем.
> посылайте WM_SYSCOMMAND с параметром SC_CONTEXTHELP
проще уж F1 нажать, да и объяснять по телефону короче. а то для такой кнопки как бы своя кнопка "Что это такое?" не понадобилась.
← →
DiamondShark © (2010-11-06 19:36) [23]
> sniknik © (06.11.10 19:13) [22]
> "нам" обязательно стандартно.
А-а... Ну, ждите подарка от микрософта.
> Германн © (06.11.10 01:38) [14]
> А то ручками слишком сложно имитировать такое поведение.
WM_SYSCOMMAND с параметром SC_CONTEXTHELP
← →
DiamondShark © (2010-11-06 19:40) [24]
> Юрий Зотов © (06.11.10 11:39) [20]
> Если кому интересно и есть смысл выкладывать - отпишитесь
> здесь.
Только пакет не нужен (за отсутствием дельфей).
Достаточно в двух словах о способе, которым удалось показать кнопку контекстной справки вместе с кнопками минимизации/максимизации.
Если это не стандартная заголовочная кнопка, а нарисованная штучка или ещё какой трюк, то не надо.
← →
Германн © (2010-11-07 00:23) [25]
> DiamondShark © (06.11.10 19:36) [23]
>
Спасибо, работает.
← →
Юрий Зотов © (2010-11-07 00:32) [26]> DiamondShark © (06.11.10 19:40) [24]
Кнопка, конечно, рисованная (а нерисованных кнопок и не бывает), но не самопально, а системными средствами (DrawFrameControl). Поскольку все заголовочные кнопки система рисует точно так же, то можно сказать, что это все же стандартная кнопка. Тем более, что и реакция на нее тоже стандартная (собственно, никакой реакции и вовсе нет, просто обрабатывается WM_NCHITTEST и тогда система сама и хинт свой показывает, и посылает WM_SYSCOMMAND с SC_CONTEXTHELP, и все остальное тоже делает сама). Поэтому контекстная справка и делается обычным образом (создается файл справки и контролам назначаются индексы топиков), и работает стандартным образом (клик по кнопке вопроса, затем клик по контролу).
Заголовок формы получается немного укороченным (за счет дополнительной кнопки), поэтому он тоже рисуется, и тоже самой системой (DrawCaption) - то есть, системным шрифтом, системными цветами, включая иконку (если она назначена), текст, градиент (если включен), многоточие при обрезке текста и все остальное.
← →
Германн © (2010-11-07 01:01) [27]
> Юрий Зотов © (06.11.10 11:39) [20]
Могу попробовать. Может и пригодится. Поскольку сейчас я кнопку сделал благодаря возможностям шкур. Если бы шкур не было...
← →
Германн © (2010-11-07 02:06) [28]
> Германн © (07.11.10 00:23) [25]
>
>
> > DiamondShark © (06.11.10 19:36) [23]
> >
>
> Спасибо, работает.
Хм. курсор меняет свой вид. А WM_HELP окну значит нужно всё равно ручками посылать.
← →
Юрий Зотов © (2010-11-07 02:21) [29]> Германн © (07.11.10 02:06) [28]
http://webfile.ru/4878709
YzDCL70.zip, 26 кБ.
Исходники. В архиве есть файл ReadMe.1st - в нем все инструкции по компиляции, установке и использованию.
Пожелания, замечания, критика, восторги и любые прочие отзывы приветствуются. Особенно интересно, как эта штука поведет себя под W7 и Vista. Глюки будут практически наверняка, но насколько серьезные? That is a question.
← →
Германн © (2010-11-07 02:30) [30]
> Юрий Зотов © (07.11.10 02:21) [29]
Скачал. Попробую.
"добавить в переменную окружения Path" - это обязательно? Или просто "устар."
← →
Юрий Зотов © (2010-11-07 02:39) [31]
> Германн © (07.11.10 02:30) [30]
Можно в пути поиска самой Delphi. Куда угодно, лишь бы она видела.
← →
Германн © (2010-11-07 02:44) [32]
> Юрий Зотов © (07.11.10 02:39) [31]
Я так и понял.
← →
Германн © (2010-11-07 03:21) [33]
> Юрий Зотов © (06.11.10 11:39) [20]
Установил в Д2007. Пришлось правда потрудиться, что бы RunTime"мовскую bpl она увидела.
Но вот в репозитарии я её (ту самую форму с кнопками) так и не увидел.
Почему не увидел, не знаю. Моей квалификции недостаточно для понимания.
← →
DiamondShark © (2010-11-07 09:09) [34]
> Юрий Зотов © (07.11.10 00:32) [26]
Ясно, спасибо.
← →
sniknik © (2010-11-07 10:41) [35]> Но вот в репозитарии я её (ту самую форму с кнопками) так и не увидел.
> Почему не увидел, не знаю. Моей квалификции недостаточно для понимания.
6. Пользоваться так: в меню File - New - Other,
затем в списке выбрать Frame Control Form.
← →
Германн © (2010-11-07 14:59) [36]
> sniknik © (07.11.10 10:41) [35]
Нет там её.
← →
Юрий Зотов © (2010-11-07 15:40) [37]
> Германн © (07.11.10 14:59) [36]
Надо инсталлировать в IDE design-time пакет.
← →
Германн © (2010-11-07 15:50) [38]
> Юрий Зотов © (07.11.10 15:40) [37]
>
>
Инсталлировал ещё ночью. :(
http://pikucha.ru/777215
← →
Юрий Зотов © (2010-11-07 16:23) [39]Должно быть...
:-(
http://webfile.ru/4879514
← →
Германн © (2010-11-07 16:57) [40]
> Юрий Зотов © (07.11.10 16:23) [39]
>
> Должно быть...
Понимаю, что должно.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.02.13;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.005 c