Форум: "Начинающим";
Текущий архив: 2014.03.23;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.002 c