![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Привет, подскажите как сделать, чтобы при наведение на кнопку или checkbox появлялась подсказка в определенном месте в label(или по другому). Кнопок и checkbox может быть много, а подсказка всегда в одном месте!
|
|
#2
|
||||
|
||||
|
В событии OnMouseEnter нужного контрола пишешь:
Код:
Label1.Caption:='Подсказка'; |
|
#3
|
|||
|
|||
|
Не работает(((
|
|
#4
|
|||
|
|||
|
Нужно
Код:
onMouseMove |
|
#5
|
|||
|
|||
|
Подсказка появляется, но не исчезает!
А если checkbox ов много, для каждого создавать onMouseMove? |
|
#6
|
|||
|
|||
|
Ну так что, в чем дело, подскажите?
|
|
#7
|
||||
|
||||
|
Цитата:
Цитата:
Работает. П.С. А не проще включить ShowHint и для каждого контрола нужную подсказку написать? |
|
#8
|
|||
|
|||
|
OnMouseEnter нет в списке, нужно что-то ещё подключать?
|
|
#9
|
||||
|
||||
|
Обычно делал так:
Код:
...
private
{ Private declarations }
procedure ShowHint(Sender: TObject);
procedure OnShowHint(var HintStr: string;
var CanShow: Boolean;
var HintInfo: THintInfo);
procedure AppIdle(Sender: TObject; var Done: Boolean);
...
end;
function FindStatusBar(var SB : TStatusBar) : Boolean;
begin
// ищем наш StatusBar на активной форме
SB := TStatusBar(Screen.ActiveForm.FindComponent('StatusBar'));
// если не найден -- ищем на основной форме
if not Assigned(SB) then
SB := TStatusBar(Application.MainForm.FindComponent('StatusBar'));
Result := SB <> NIL;
end;
procedure TMainForm.ShowHint(Sender: TObject);
var
SB : TStatusBar;
begin
// если что-то обнаружено -- рисуем на нем наш текст
if FindStatusBar(SB) and Assigned(SB) then
SB.SimpleText := Application.Hint;
end;
// меняем цвет и ширину стандартной подсказки.
procedure TMainForm.OnShowHint(var HintStr: string;
var CanShow: Boolean;
var HintInfo: THintInfo);
begin
with HintInfo do
begin
HintMaxWidth := 250;
HintColor := clAqua;
end;
end;
procedure TMainForm.AppIdle(Sender: TObject; var Done: Boolean);
var
S : String;
SB : TStatusBar;
begin
S := Screen.ActiveControl.Hint;
// если что-то обнаружено -- рисуем на нем наш текст
if (not Screen.ActiveControl.ShowHint) and (FindStatusBar(SB)) and (Assigned(SB)) then
begin
if S <> '' then
SB.SimpleText := S
else
SB.SimpleText := '';
end;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
...
Application.OnHint := ShowHint;
Application.OnShowHint := OnShowHint; // Установка обработчика
Application.OnIdle := AppIdle;
...
end;Код:
Подсказка Подсказка|Очень длинная подсказка. |
|
#10
|
||||
|
||||
|
Код:
type
TForm1 = class(TForm)
Button1: TButton;
CheckBox1: TCheckBox;
ApplicationEvents1: TApplicationEvents;
Label1: TLabel;
Edit1: TEdit;
procedure ApplicationEvents1Hint(Sender: TObject);
...
procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
Label1.Caption:=Application.Hint;
end;http://zalil.ru/32374010 |
|
#11
|
|||
|
|||
|
[quote=NumLock]
Код:
type
TForm1 = class(TForm)
Button1: TButton;
CheckBox1: TCheckBox;
ApplicationEvents1: TApplicationEvents;
Label1: TLabel;
Edit1: TEdit;
procedure ApplicationEvents1Hint(Sender: TObject);
...
procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
Label1.Caption:=Application.Hint;
end;Спасибо, сделал так! |