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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2009, 16:37   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нужно "если строка в него не помещается"
А я не против этого, я к тому что ты не вызываешь хинт насильно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2009, 16:40   #12
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Цитата:
А я не против этого, я к тому что ты не вызываешь хинт насильно
А, ну я тоже не против этого, хотя хинт сам все же появляется, поэтому я не придал этому значения.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.08.2009, 16:51   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
хотя хинт сам все же появляется
Это если указано ShowHint и прочие с ним. Я не люблю такого. уж если хинт вызывать то за шкирку и немедля.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2009, 16:55   #14
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

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

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

Ага, надо бы еще else добавить, а то в хинте будет предыдущее значение в некоторых случаях
Код:
procedure TForm1.EditsMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 Canvas.Font.Size := TEdit(Sender).Font.Size;
 if TEdit(Sender).Width <  Canvas.TextWidth(TEdit(Sender).Text)
 then begin
  TEdit(Sender).Hint := TEdit(Sender).Text 
  TEdit(Sender).ShowHint := true;
  Application.ActivateHint(Mouse.CursorPos);
 end else TEdit(Sender).ShowHint := false;
end;
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 28.08.2009, 17:29   #17
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Ого, сколько разных вариантов ) Спасибо!
Кстати можно без канвы сделать, в винАпи есть функция, я уж не помню имя, но я использовал её в листбоксе чтобы точечки добавлять.

Вобщем, вот так я сделал
Код:
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  p: TPoint;
  s: string;
  size: tagSIZE;
begin
  size.cx:=0;
  s:=Edit1.Text;
  GetTextExtentPoint32(Canvas.Handle, PChar(s), Length(S), size);
  if size.cx > Edit1.ClientWidth then
  begin
    p.X:=Edit1.Left;
    p.Y:=Edit1.Top;
    p:=ClientToScreen(p);
    Edit1.Hint:=Edit1.Text;
    Application.ActivateHint(p);
  end
  else Edit1.Hint:='';
end;
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)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось Stilet; 31.08.2009 в 08:43.
mutabor вне форума Ответить с цитированием
Старый 28.08.2009, 20:32   #18
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

А текст подсказки Вы будете сами задавать? Или он будет меняться? Если сами, то можно попробовать такой код:
Код:
Edit1.Hint:='Строка подсказки 1' + #13 + 'Строка 2';
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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