Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.03.23;
Скачать: CL | DM;

Вниз

Hint   Найти похожие ветки 

 
Psionic   (2013-06-05 11:09) [0]

Задача: при наведении мыши на Edit, если текст в него не вмещается, нужно выводить всплывающую подсказку с этим текстом. Как это правильно сделать? Вычислять длину текста (Canvas.TextWidth) и проверять, если его длина больше клиентской длины Edit"а - выводить Hint? Все это делать в событии OnMouseMove?


 
robt5   (2013-06-05 11:28) [1]


> Все это делать в событии OnMouseMove?

нафига? во время ввода текста проверять, если влазит хинт:="" иначе ...


 
Psionic   (2013-06-05 11:34) [2]


> нафига? во время ввода текста проверять, если влазит хинт:
> ="" иначе ...


текст не обязательно будет вводится


 
Psionic   (2013-06-05 11:46) [3]

Сделал так:


procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 TEdit(Sender).Hint := TEdit(Sender).Text;
 TEdit(Sender).ShowHint := Canvas.TextWidth(TEdit(Sender).Text) >
   TEdit(Sender).ClientWidth;
end;


Вроде бы работает.


 
robt5   (2013-06-05 12:38) [4]


> текст не обязательно будет вводится

так если он не вводится, то и хинт пустой, логично?
нафига при каждом дрыге мышью насиловать проц?

> Вроде бы работает.

машина со спущенными колесами тоже вроде бы едет....


 
Dimka Maslov ©   (2013-06-05 14:10) [5]

Надо делать треккинг мыши. Тогда венда сама будет говорить, что усер навёл мышь на окно и держит курсор там. Искать по ключевому слову TrackMouseEvent


 
Psionic   (2013-06-06 10:42) [6]

В продолжении темы: Как определить размер отступа (pix) от левого края текста в TEdit. Это нужно, чтобы проверить влазил ли текст в область TEdit. Так некорректно работает:


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   procedure Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if Canvas.TextWidth(Edit1.Text) > Edit1.ClientWidth then
   Edit1.Hint := "Текст не влазит"
 else
   Edit1.Hint := "Текст влазит";
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Edit1.Text := "yyyyyyyyyyyyyyyyyyyyyytr";
 Edit1.ShowHint := True;
end;

end.


При наведении выводится, что текст влазит, хотя реально нет (Длина Edit"а - 121 pix).


 
Psionic   (2013-06-06 10:45) [7]

Погрешность где-то 1 символ.


 
Германн ©   (2013-06-06 15:40) [8]

Копай в сторону DrawText с параметром DT_CALCRECT.


 
Ega23 ©   (2013-06-07 14:48) [9]


> так если он не вводится, то и хинт пустой, логично?

Не логично, он может быть вставлен из буфера.


> Сделал так:

Только делать это надо не на MouseMove, а на Edit.OnChange
И ты TextWidth берёшь от канвы формы, а надо - от канвы TEdit, которой у неё, вроде как, нету...


 
Германн ©   (2013-06-08 02:52) [10]


> И ты TextWidth берёшь от канвы формы, а надо - от канвы
> TEdit, которой у неё, вроде как, нету...

А мне вообще уже не понятно как найти/посчитать ширину текста в TEdit и во многих других контролах, у которых нет канвы.


 
Ega23 ©   (2013-06-08 12:09) [11]


> А мне вообще уже не понятно как найти/посчитать ширину текста
> в TEdit и во многих других контролах, у которых нет канвы.


Был тут код один от ИШ. Давно-давно себе в склерозничек записал. Ща поищу.

Во, нашёл


function GetTextWidthInPixels(AText: string; AControl: TControl): integer;
// Copyright by Игорь Шевченко ©
var
propInfo: PPropInfo;
thisFont: TFont;
begin
Result := 0;
propInfo := GetPropInfo(AControl.ClassInfo, "Font");
if propInfo <> nil then begin
  thisFont := TFont(GetObjectProp(AControl, "Font"));
  if Assigned(thisFont) then
    with TControlCanvas.Create do
      try
        Control := AControl;
        Font.Assign(thisFont);
        Result  := TextWidth(AText);
      finally
        Free;
      end;
end;
end;


 
Германн ©   (2013-06-08 15:19) [12]


> Был тут код один от ИШ.

Значит стараниями двух модераторов задача автора решена полностью.
Вот только сам автор пропал :)


 
han_malign   (2013-06-11 09:59) [13]


> Был тут код один от ИШ

- дык у него и Hint такой был, только для CB - HSHintComboBox...


 
Германн ©   (2013-06-12 04:04) [14]


> han_malign   (11.06.13 09:59) [13]
>
>

Для EDIT контрола есть ещё одна тонкость. :)



Страницы: 1 вся ветка

Текущий архив: 2014.03.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
2-1370709869
sanekgyrev
2013-06-08 20:44
2014.03.23
Написал,но вкралась ошибка( выделена восклицательным знаком)


15-1380876002
брат Птибурдукова
2013-10-04 12:40
2014.03.23
Вопрос по ассоциациям файлов, etc


6-1271980517
Дмитрий С
2010-04-23 03:55
2014.03.23
Получения текста TXT записи зоны.


2-1370372241
oliksin
2013-06-04 22:57
2014.03.23
Помогите разобраться с программой. Строки.


15-1380832202
Юрий
2013-10-04 00:30
2014.03.23
С днем рождения ! 4 октября 2013 пятница