Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ещё раз о "подсказках"


Страницы:   1 2 3

Германн ©   (2010-11-05 02:10:00) 

Всё думаю как наиболее снабдить юзера подсказками. С хинтами на статус баре справился. Но статус бар не безразмерный. Очень длинная подсказка (скорее даже это уже не подсказка, а объяснение что это такое) туда не влезет. Вспомнилась мне при этом стандартная фишка Микрософт "Что это такое". Фишка включает в себя кнопку со значком вопроса, курсор со стрелкой и значком вопроса, плюс особое всплывающее окно, которое показывается когда этим курсором щелкнешь на дочернем окне.
Вот сам вопрос. Эта технология как-то реализована? В виде WinAPI'шных функций. (О реализации в Дельфи я не слышал, но вдруг и она есть?)
Или всё нужно делать ручками?
Д2007


sniknik   (2010-11-06 01:57:00) [41]

> Добавить свою кнопку слева от системных не проблема.
в висте/имн7 под стиль аэро/... ???


Германн   (2010-11-06 01:38:00) [42]


> sniknik ©

Да. Без кнопки вопроса сей код малополезен, а без кнопок мин/мах некошерно.

Добавить свою кнопку слева от системных не проблема. А нельзя ли сказать винде, что эта кнопка контекстной справки?
А то ручками слишком сложно имитировать такое поведение.


Германн   (2010-11-05 19:30:00) [43]


> Вот реализация на Дельфи.

Спасибо!


Anatoly Podgoretsky   (2010-11-05 12:08:00) [44]

> sniknik  (05.11.2010 11:42:11)  [11]

А на чем еще я мог делать в 1995-1997 годах, не на НТ4 же.


sniknik   (2010-11-05 11:42:00) [45]

на win98? может быть, сейчас? вряд ли ;о(.
а мелкософт вместо добавления действительно нормальных вещей только над интерфейсом "издевается". :(


Anatoly Podgoretsky   (2010-11-05 11:20:00) [46]

> sniknik  (05.11.2010 11:15:09)  [9]

Я этим занимался очень давно, 13 и более лет назад и уже ничего не помню, но
мне как то удалось добиться и для обычной формы, но как не помню и проекта
того уже нет.


sniknik   (2010-11-05 11:15:00) [47]

ну вот, я именно про это. т.к. мне это больше нужно на главной форме... там где по программе/элементам больше всего вопросов.


Anatoly Podgoretsky   (2010-11-05 11:03:00) [48]

Контекстная справка, предназначена только для окон со стилем DIALOG - ограничение Виндоус


sniknik   (2010-11-05 11:01:00) [49]

> Я немного тебя не понимаю, ты о чем, если о заголовке окна, то это штатно
через BorderIcons
кнопка хелпа не совместима с минимизацией/развертыванием, т.е. можно только в "сингл" крестиком (как у диалоговых стандартно). у обычных окон (есть кнопки минимизации/...) не работает.


Anatoly Podgoretsky   (2010-11-05 10:44:00) [50]

> sniknik  (05.11.2010 10:19:04)  [4]

Я немного тебя не понимаю, ты о чем, если о заголовке окна, то это штатно
через BorderIcons


sniknik   (2010-11-05 10:28:00) [51]

> еще бы добавить вопрос в системные кнопки
в смысле, добавить то можно, но только так
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;

но это как то "не кошерно"....


sniknik   (2010-11-05 10:19:00) [52]

Anatoly Podgoretsky ©   (05.11.10 08:43) [3]
еще бы добавить вопрос в системные кнопки, для обычных, не диалоговых окон, и можно пользоваться.

полезная в принципе вещь, гораздо полезнее чем весь стиль "аэро" например (имхо конечно), но почему то неиспользуемая.


Anatoly Podgoretsky   (2010-11-05 08:43:00) [53]

Вот реализация на Дельфи.
Из архива писем.

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


Anatoly Podgoretsky   (2010-11-05 08:36:00) [54]

> Германн  (05.11.2010 02:10:00)  [0]

Руками с помощью АПИ


Германн   (2010-11-05 02:24:00) [55]

Да ещё поясню суть проблемы.
Данная программа будет бесплатной. (Т.е. конечно "условно-бесплатной", потому что она будет даваться тому, кто купил железо.) Значит хэлпа у этой программы никогда не будет.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо