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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2009, 15:54   #1
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию Hint на Edit

Как сделать всплывающую подсказку при наведении на Edit если строка в него не помещается?

Где-то читал про это, не могу вспомнить, там буквально пару строк кода, причем это приводилось между делом, рассказывалось про что-то другое вообще.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 28.08.2009, 16:06   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Насчет двух строчек не знаю, но вот что я придумал:
OnMouseMove у едита:
Код:
procedure TForm1.EditsMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
 _textWidth: integer;
begin
 Canvas.Font.Size := TEdit(Sender).Font.Size;
 _textWidth := Canvas.TextWidth(TEdit(Sender).Text);
 if TEdit(Sender).Width < _textWidth then
  TEdit(Sender).Hint := TEdit(Sender).Text
 else
  TEdit(Sender).Hint := '';
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.08.2009, 16:07   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Edit1.ShowHint:=true;
Edit1.Hint:=Edit1.Text;
Application.ActivateHint(Mouse.CursorPos);
end;
Цитата:
но вот что я придумал:
Это помоему перебор...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2009, 16:08   #4
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Stilet, нужно "если строка в него не помещается". )
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.08.2009, 16:15   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

По моему проще посчитать, сколько символов он может вместить, а затем написать
Код:
If Length(Edit1.Text)>23 Then Edit1.ShowHint:=TRUE;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.08.2009, 16:19   #6
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

А если длина edit'а динамически изменяется?
Да и как вы посчитаете длину текста? Ширина символов разная...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.08.2009, 16:23   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
А если длина edit'а динамически изменяется?
Тогда нам не нужна функция по показыванию едита в хинте.
Цитата:
Да и как вы посчитаете длину текста? Ширина символов разная...
Можно взять букву A - у нее средняя ширина. А я и не сказал, что это будет точно. Просто будет меньше писанины.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 28.08.2009, 16:28   #8
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
Тогда нам не нужна функция по показыванию едита в хинте.
Нет, я имел ввиду, например, динамически при изменении размеров формы...
Но не будете же вы изменять ширину формы специально, чтобы увидеть весь текст в Edit'ах.
Цитата:
Можно взять букву A - у нее средняя ширина. А я и не сказал, что это будет точно. Просто будет меньше писанины.
Что будет меньше писанины - верно.
Но это, наверно, у меня от отца, всегда и везде - точность...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.08.2009, 16:34   #9
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

есть же функция определяющая длину в пикселах,
я например делал через canvas.textlength
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 28.08.2009, 16:37   #10
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
есть же функция определяющая длину в пикселах,
я например делал через canvas.textlength
Наверно не TextLength, а TextWidth.
И вы повнимательней посмотрите мой код, там именно данный вариант и написан...
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CTreeCtrl и hint iiunbreakableii Общие вопросы C/C++ 0 17.07.2009 14:59
Многострочный HINT Alex Cones Общие вопросы Delphi 8 27.04.2009 18:08
hint компонента edit delphi Doget Помощь студентам 7 19.04.2009 10:02
baloon hint Д'якон Win Api 2 08.02.2009 00:22
Свой hint Altera Общие вопросы Delphi 3 14.05.2008 15:01