Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определить отступ от левого края текста 
:(
    Опции темы
Dmitry1987
Дата 5.6.2013, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.5.2008

Репутация: нет
Всего: нет



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

Так некорректно работает:

Код

if Canvas.TextWidth(S) > Edit1.ClientWidth then
  ShowMessage('Text fit!')
else
  ShowMessage('Text can''t fit!');


Это сообщение отредактировал(а) Dmitry1987 - 5.6.2013, 17:00
PM MAIL   Вверх
northener
Дата 5.6.2013, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



А так?
Код

if Canvas.TextWidth(S) < Edit1.ClientWidth then
  ShowMessage('Text fit!')
else
  ShowMessage('Text can''t fit!');



--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Dmitry1987
Дата 5.6.2013, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.5.2008

Репутация: нет
Всего: нет



Цитата(northener @ 5.6.2013,  15:43)
А так?
Код

if Canvas.TextWidth(S) < Edit1.ClientWidth then
  ShowMessage('Text fit!')
else
  ShowMessage('Text can''t fit!');

перепутал ShowMessage местами, но смысл задачи от этого не меняется
PM MAIL   Вверх
Poseidon
Дата 5.6.2013, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



А что конкретно работает не корректно? У меня вроди нормально обрабатывается. Может вся загвоздка в том, что в S, а что реально в Edit.Text?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Dmitry1987
Дата 6.6.2013, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 3.5.2008

Репутация: нет
Всего: нет



Цитата(Poseidon @ 5.6.2013,  18:03)
А что конкретно работает не корректно? У меня вроди нормально обрабатывается. Может вся загвоздка в том, что в S, а что реально в Edit.Text?

Вот пример:

Код

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).
PM MAIL   Вверх
Poseidon
Дата 6.6.2013, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Dmitry1987 @  6.6.2013,  09:39 Найти цитируемый пост)
При наведении выводится, что текст влазит
Ты не поверишь... На XE3 пишет что "не влазит". Какие настройки Font?



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
northener
Дата 6.6.2013, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Dmitry1987 @  6.6.2013,  09:39 Найти цитируемый пост)
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;


А причём тут канва формы и ширина текста в эдите?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Poseidon
Дата 6.6.2013, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(northener @  6.6.2013,  14:37 Найти цитируемый пост)
А причём тут канва формы и ширина текста в эдите?
Если принять во внимание, что очень редко Font форм отличается от Font'a компонентов на этой форме, можно при помощи Canvas.TextWidth узнать ширину занимаемого текста. Хотя, в серьезных проектах, это может служить не более чем временной заглушкой, тем не менее это работает.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
northener
Дата 6.6.2013, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Poseidon @  6.6.2013,  15:08 Найти цитируемый пост)
тем не менее это работает.

У меня пример автора выдает "Текст не влазит", хотя он реально влазит и даже ещё чуток места осталось.
ParentFont = True
Вот если три буковки y убрать, тогда напишет "влазит" smile

Это сообщение отредактировал(а) northener - 6.6.2013, 15:18


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
northener
Дата 7.6.2013, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Poseidon @  6.6.2013,  15:08 Найти цитируемый пост)
Если принять во внимание, что очень редко Font форм отличается от Font'a компонентов на этой форме, можно при помощи Canvas.TextWidth узнать ширину занимаемого текста. Хотя, в серьезных проектах, это может служить не более чем временной заглушкой, тем не менее это работает.

Я не знаю что нужно принять во внимание при вычислении ширины текста в TEdit.
Д2007


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Shaggy
Дата 7.6.2013, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 2.5.2007
Где: г.Ижевск

Репутация: 3
Всего: 5



PM MAIL ICQ   Вверх
northener
Дата 7.6.2013, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 8
Всего: 20



Цитата(Shaggy @  7.6.2013,  03:49 Найти цитируемый пост)
EM_GETRECT

Т.е. предлагаешь использовать возвращенный в этом сообщении RECT вместо TEdit.ClientRect?
Это конечно ближе к истине. Но всё равно не решает задачу гарантировано.
Хотя вру. С помощью этого сообщения действительно правильно проверяется влазит текст или нет.

Это сообщение отредактировал(а) northener - 7.6.2013, 16:45


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0991 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.