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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2014, 10:33   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Автоподгон ширины Edit

Добрый день!
Возможно ли сделать автоподгон ширины компонента edit? Чтобы ширина поля подгонялась под длину введенного текста.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.09.2014, 10:38   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А че нельзя? Можно. Узнав ширину строки в пикселях (например Canvas.TextWidth) и установив Width эдита
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.09.2014, 10:42   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Аватар, можешь пример черкануть? Понимаю, что это вроде бы просто должно реализовываться.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.09.2014, 11:10   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Canvas не прокатит с эдит, тогда что-то в таком в духе
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
    lMinWidth, lMaxWidth: Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  lMinWidth:=Edit1.Width;
  lMaxWidth:=lMinWidth+200;
end;

procedure TForm1.Edit1Change(Sender: TObject);
var xFont: TFont;
    DC: HDC;
    SaveFont: HFont;
    TextSize: TSize;
begin
  xFont:=TFont.Create;
  xFont.Assign(Edit1.Font);
  DC:=GetDC(Handle);
  SaveFont:=SelectObject(DC,xFont.Handle);
  GetTextExtentPoint32(DC,PChar(Edit1.Text),Length(Edit1.Text),TextSize);
  SelectObject(DC,SaveFont);
  ReleaseDC(0,DC);
  xFont.Free;
  if TextSize.cx<lMinWidth then Edit1.Width:=lMinWidth
  else if TextSize.cx+12>lMaxWidth then Edit1.Width:=lMaxWidth
  else Edit1.Width:=TextSize.cx+12;
end;

end.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.09.2014, 11:32   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Аватар, а почему именно 200? Как сделать, чтобы ширина увеличивалась несмотря на это значение, а просто, под длину текста, не важно какой он длины
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.09.2014, 11:35   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну сделай 500 или вообще не проверяй на максимальную ширину. Все таки по джентльменским правилам желательно что бы эдит умещался полностью на форме. Не?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.09.2014, 11:49   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Да нет в принципе. Эдит не будет по длине больше 255 символов. Не за чем просто длинее. Без проверки на максимальную ширину надо такое условие оставить:
Код:
  if TextSize.cx<lMinWidth then Edit1.Width:=lMinWidth
  else if TextSize.cx+12>lMaxWidth
?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.09.2014, 12:07   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  if TextSize.cx<lMinWidth then Edit1.Width:=lMinWidth
  else Edit1.Width:=TextSize.cx+12;
12 тоже с потолка взял
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.09.2014, 12:47   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Аа, понятно.
Вот, нормально рабочий код, подправил, может кому пригодится:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var xFont: TFont;
    DC: HDC;
    SaveFont: HFont;
    TextSize: TSize;
begin
  xFont:=TFont.Create;
  xFont.Assign(Edit1.Font);
  DC:=GetDC(Handle);
  SaveFont:=SelectObject(DC,xFont.Handle);
  GetTextExtentPoint32(DC,PChar(Edit1.Text),Length(Edit1.Text),TextSize);
  SelectObject(DC,SaveFont);
  ReleaseDC(0,DC);
  xFont.Free;
  Edit1.Width:=TextSize.cx+12;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.09.2014, 12:52   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Артем, ток такой чепухи с эдитом ни когда и ни где не видел. Подозреваю что юзер плеваться будет. Зачем она вообще такая плюшка?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение ширины едита wulf_01 PHP 7 10.11.2011 14:11
Фиксирование ширины DIV vicvtor HTML и CSS 2 24.10.2011 08:39
Автоподбор ширины. Baikonur Microsoft Office Access 1 28.04.2011 19:45
Перевод ширины таблиц из см в % Busine2009 Microsoft Office Word 8 31.05.2009 15:51
уменьшение ширины таблицы Viteef HTML и CSS 5 18.02.2009 23:59