Форум: "Основная";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Вниз
Мужики, выручайте... Как заставить THintWindow получать сообщения Найти похожие ветки
← →
Driver (2002-10-01 15:36) [0]Есть проблема: Нужно в THintWindow вывести несколько подсказок и перемещатся между ними используя либо колесико, либо кнопочки... Но это все мелочи, когда используется TForm, а вот как застваить THintWindow сообщения вот это проблема... Просто когда работаешь с формой, то она на себя заберает фокус, а это не надо, да и охото чтоб окошко подсказки не было таким тежеловесным... Мужики выручайте, уже ничего в голову не лезет...
← →
Игорь Шевченко (2002-10-01 15:42) [1]Обычную форму, раскрашенную под цвет THintWindow - оно, IMHO, проще...
← →
Driver (2002-10-01 15:51) [2]Спасибо конечно за ответ, но это не совсем то, я не ищу простых решений - это раз, и во вторых я уже сделал это с обыкновенной формой, но когда ее пытаешься показать, она становится активной, а это не нужно, потому-что это подсказка, но нужно чтоб подсказка получала сообщения, для того чтоб ее убрать, когда нет над ней курсора, и чтоб можно было управлять подсказками, т.к. их может быть от 1 и больше...
P.S. Игорь, извини, если грубо, но просто уже так достало, что сил нет, двое суток уже бьюсь... а надо было уже вчера
← →
Игорь Шевченко (2002-10-01 16:43) [3]Driver (01.10.02 15:51)
"Я сам себе придумываю трудности и их преодолеваю" (с) Известный анекдот.
А если серьезно, то зачем желать странного и требовать от пользователя переучиваться под такую вот хитрую программу с особенным Hint"ом ? У каждого интерфейсного элемента есть свое четкое назначение и свое, не менее четкое поведение, которого от этого элемента ожидает пользователь.
Зачем ?
← →
qube (2002-10-01 16:46) [4]Почему странного?
В MS VC++ выскакивает именно такой хинт, со стрелками, если набрать в редакторе имя перегруженной функции.
← →
Игорь Шевченко (2002-10-01 16:54) [5]qube © (01.10.02 16:46)
Не видел. Но может, там и не хинт вовсе ? :-)))
← →
qube (2002-10-01 16:56) [6]Может, но очень похоже :).
Выполняет все функции обычного хинта, позволяя при этом выбрать по вкусу, какой вариант функции вызывать.
← →
Игорь Шевченко (2002-10-01 17:08) [7]qube © (01.10.02 16:56)
Вот в Delphi тоже Code Completion есть...Но не Hint ведь :-)
← →
qube (2002-10-01 17:13) [8]А в VC -- хинт. Это я к тому, что такое решение вполне нормальное. Мне бы тоже было интересно, как это сделать.
← →
Игорь Шевченко (2002-10-01 17:18) [9]qube © (01.10.02 17:13)
IMHO, выглядит, как hint :-)
А как сделать - обычная форма, раскрашенная под цвет hint"a, без бордюра, с возможностью обрабатывать сообщения от мыши и клавиатуры...
Если бы я видел, что именно имеется в виду, может, еще какие-либо идеи появились бы :-)
← →
han_malign (2002-10-01 17:43) [10]Под Delphi: THintWindow наследуется от TCustomControl (в controls), а где Control там и все системные команды (CM_...,WM_...), а фокус можно терять на CM_MOUSELEAVE, или по таймауту.
Controls.pas:
THintWindow = class(TCustomControl)
private
FActivating: Boolean;
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
procedure WMNCPaint(var Message: TMessage); message WM_NCPAINT;
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure Paint; override;
................et cetera
З.Ы. Forms.HintWindowClass:=TMyHintWindow;
← →
Driver (2002-10-02 05:51) [11]Мужики, большое спасибо за дескуссию и ответы, но все это я уже попробовал, я просто привык все делать сам, но сейчас просто всремени не хватает, два проекта срочных, сутками сижу на работе, и затыка на этом гребаном хинте еще...
Но дела-то вдругом, может я конечно плохо излагаю мысли, но нужно следующее:
THintWindow это не что иное как обыкновенный контрол, он показывается с помощью функций WinAPI, ShowWindow(...), вот у меня большое подозрение, что для того чтобы начали работать события нужно его положить на TForm, похоже только она умеет работать с системными событиями, а все события которые отлавливают методы с ключевым словом message посылает сама Delphi, с помощью метода TObject.Dispatch. Так вот вопрос, можно ли заставить обыкновенный TControl без участия TForm обрабатывать события Windows? Заранее благодарен...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Память: 0.79 MB
Время: 2.867 c