Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение Hint (подсказки) на PaintBox 
:(
    Опции темы
Vladimir_K
Дата 3.1.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Как сделать, чтобы используя данную процедуру:

Код

procedure TGraph.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 LX.Caption:=Inttostr(X);
 LY.Caption:=Inttostr(Y);
end;


т.е. при наведении курсора на определенную точку на PaintBox выводился Hint? Желательно многострочный.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
VICTAR
Дата 4.1.2007, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 2
Всего: 80



Hint появляется, когда мышь находится в квадрате, размером 50х50 (начало отсчета от верхнего левого угла).
Код

const TopCorner     = 'Верхний'#13+
                      'угол';
var
  Form1       : TForm1;
  GlbX,
  GlbY        : integer;
  MyHint      : string;
  isHintShow  : boolean;

implementation

{$R *.dfm}

procedure TForm1.OnShowHint(var HintStr: string;
  var CanShow: Boolean; var HintInfo: THintInfo);
begin
  if isHintShow then
    begin
      HintInfo.HintPos:=Point(GlbX,GlbY);
      HintStr:=MyHint;
    end;
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
    if (x in [0..50])and(y in [0..50]) then
    begin
      GlbX:=PaintBox1.ClientOrigin.X+x;
      GlbY:=PaintBox1.ClientOrigin.y+y;
      isHintShow:=true;
    end else begin
              Application.CancelHint;
              isHintShow:=false;
             end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
Application.OnShowHint := OnShowHint;
MyHint:=TopCorner;
end;


Это сообщение отредактировал(а) VICTAR - 4.1.2007, 01:44
PM MAIL   Вверх
Vladimir_K
Дата 4.1.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Вроде бы все правильно сделал, ошибок при компилляции нет, но пробую и так и эдак, а не работает. Hint не появляется...
У меня на форме расположен ScrollBox, а на нем PaintBox, а не просто PaintBox прямо на форме, может это имеет значение?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
VICTAR
Дата 4.1.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 2
Всего: 80



А у PaintBox ShowHint=true?
PM MAIL   Вверх
Vladimir_K
Дата 4.1.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Хотелось бы как-то попроще это все сделать, например, так:

Код

procedure TGraph.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if (X=50)and(Y=50)
  then begin
   PaintBox1.Hint:='Hint 1';
  end
  else if (X=60)and(Y=60)
  then begin
   PaintBox1.Hint:='Hint 2';
  end;
end;

Но Hint выводится только после щелчка мышью на PaintBox, а как сделать, чтобы новый хинт выводился просто при перемещении курсора в новую позицию?

Добавлено @ 19:32 
PaintBox ShowHint=true.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
VICTAR
Дата 4.1.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 2
Всего: 80



А процедура OnShowHint объявлена?

Код

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormShow(Sender: TObject);
    procedure OnShowHint(var HintStr: string;  //вот здесь!
  var CanShow: Boolean; var HintInfo: THintInfo);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Код точно рабочий, не раз проверялся...
PM MAIL   Вверх
Vladimir_K
Дата 4.1.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(VICTAR @  4.1.2007,  19:51 Найти цитируемый пост)
А процедура OnShowHint объявлена?

Конечно. Без этого объявления компилятор выдает ошибку, а у меня ошибок нет.
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Sunvas
Дата 4.1.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: нет
Всего: 89



Копаем в сторону thintwindow


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Vladimir_K
Дата 4.1.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(Sunvas @  4.1.2007,  20:12 Найти цитируемый пост)
Копаем в сторону thintwindow 

В смысле?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Vladimir_K
Дата 4.1.2007, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Вобщем сделал по образу и подобию этого кода - щелкнул по PaintBox - появился Hint:
Код

procedure TGraph.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if (X=50)and(Y=50)
  then begin
   PaintBox1.Hint:='Hint 1';
  end
  else if (X=60)and(Y=60)
  then begin
   PaintBox1.Hint:='Hint 2';
  end;
end;

Но теперь есть еще один вопрос: Hint появляется всего на пару секунд, можно ли увеличить время отображения, а еще лучше - пусть отображается, пока нажата кнопка мыши?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0685 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.