Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2010, 03:10   #1
Sergio_O
Пользователь
 
Регистрация: 03.11.2010
Сообщений: 15
По умолчанию Hint на TImage, в зависимости от координат.

Пишу прогу для домашнего использования: автоматический подсчет очков при игре в Дартс, что бы каждый раз мозг не ломать сколько выбил и сколько осталось.
Вобщем проблемка такая, при наведении на нужный сектор, должен выскакивать хинт с количеством очков, но он показывается один раз и все. Для повторного показа хинта, нужно навести курсор на форму и снова на картинку.
Как быть. А вообще желательно, чтобы хинт 'бегал' за курсором.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg, Math;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const Sectors: array [0..19] of Integer = (13, 4, 18, 1 , 20, 5, 12, 9, 14, 11, 8, 16, 7, 19, 3, 17, 2, 15, 10, 6);

var
  Form1: TForm1;
  sector, multiplier : Integer;
  bull, bull2 : boolean;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if bull then
    begin
      ShowMessage ('50');
      Exit;
    end;
  if bull2 then
    begin
      ShowMessage ('25');
      Exit;
    end;
  ShowMessage (IntToStr (sector * multiplier));
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var dx, dy, Length, Angle: Integer;
    NewHint : String;
begin
  dx:= x - Image1.Width div 2;
  dy:= Image1.Height div 2 - y;
  Length:= Round(Sqrt(Sqr(dx) + Sqr(dy)));
  Angle:= Round((180 / Pi) * arccos(dx / Length));
  if dy < 0 then
    Angle:= 360 - Angle;
  Angle:= (Angle + 351) mod 360;
  Label1.Caption:= IntToStr(Length);
  Label2.Caption:= IntToStr(Angle);
  NewHint:= IntToStr(Sectors[Angle div 18]);
  sector:= Sectors[Angle div 18];
  bull:= false;
  bull2:= false;
  multiplier:= 1;
  case Length of
    0..6: begin
      NewHint:= '50';
      bull:= true;
    end;
    7..16: begin
      NewHint:= '25';
      bull2:= true;
    end;
    98..107: begin
      NewHint:= NewHint + ' x 3';
      multiplier:= 3;
    end;
    161..170: begin
      NewHint:= NewHint + ' x 2';
      multiplier:= 2;
    end;
  end;
  if Length>170 then
    begin
      NewHint:= '0';
      sector:= 0;
    end;
  Label3.Caption:= NewHint;
  if Image1.Hint <> NewHint then
    begin
      Image1.Hint:= NewHint;
      Application.HideHint;
    end;
end;

end.
Update:

Нашел временное, но элегантное решение Hint это TLabel.
Код:
procedure TForm1.Image1MouseEnter(Sender: TObject);
begin
  Hint.Visible:= true;
end;

procedure TForm1.Image1MouseLeave(Sender: TObject);
begin
  Hint.Visible:= false;
end;


      Hint.Caption:= NewHint + ' ';
      Hint.Left:= X + Image1.Left + 9;
      Hint.Top:= Y + Image1.Top + 18;
Но все же, вопрос остается открытым.
Внешний вид (пока ):

Последний раз редактировалось Sergio_O; 10.11.2010 в 06:25.
Sergio_O вне форума Ответить с цитированием
Старый 10.11.2010, 10:59   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

положи на image сверху panel и гоняй ее.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти запись в TList в зависимости от координат TPaintBox Kottik Общие вопросы Delphi 2 18.04.2010 21:55
подсказка hint пауэрлифтинг Общие вопросы Delphi 3 18.02.2010 00:25
Hint на Edit mutabor Общие вопросы Delphi 17 28.08.2009 20:32
CTreeCtrl и hint iiunbreakableii Общие вопросы C/C++ 0 17.07.2009 14:59
baloon hint Д'якон Win Api 2 08.02.2009 00:22