Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Узнать текущую ширину edit'а


Vincero ©   (2010-04-07 21:46:00) 

Привет всем!
Как узнать текущую ширину edit'а (точнее - его области для текста) в пикселях?
Мне нужно знать, какой максимальный Canvas.TextWidth он может показать на экране.


Andy BitOff   (2010-04-08 09:52:00) [1]


> Vincero   (07.04.10 23:30) [7]

MinimizeName ищи. Только Edit действительно для этих целей не подходит.


> Amoeba_   (07.04.10 23:53) [8]
> И что может получиться при редактировании такой строки?

При onEnter
Edit.Text := переменная_хранящая_путь.

При onExit
переменная_хранящая_путь := Edit.Text;
Edit.Text := MinimizeName(...);

Но, имхо, "Edit действительно для этих целей не подходит"


Игорь Шевченко   (2010-04-08 00:20:00) [2]

Vincero   (07.04.10 23:30) [7]

А точно ли Edit нужен ? Может, достаточно StaticText ?


Amoeba_   (2010-04-07 23:53:00) [3]


> чтобы она принимала укороченный вид (C:\...\All Users\)
> в зависимости от размеров Edit’а

И что может получиться при редактировании такой строки?


Vincero   (2010-04-07 23:30:00) [4]

В терминах задачи нужно, чтобы строка с путем к папке (например, C:\Documents\All Users\) умещалась в видимой области Edit’а. В противном же случае – чтобы она принимала укороченный вид ( C:\...\All Users\) в зависимости от размеров Edit’а.


Игорь Шевченко   (2010-04-07 23:24:00) [5]

а что в итоге надо ? (только не в терминах функций и эдитов, а в терминах задачи)


Vincero   (2010-04-07 23:20:00) [6]

ClientWidth не дал нужного результата. Откопал в интернете следующую ф-ию, но, кажется, он все равно не учитывает длину моего Edit'а.

Может, найдете причину...

function MinimizePath(Edit: TEdit; const Path: String): String;
var
 TextRect: TRect;
 P: PChar;
 DC: HDC;
begin
 Result := '';
 DC := GetDC(Edit.Handle);
 if DC > 0 then
 try
   P := StrAlloc(Length(Path) + 5);
   try
     StrPCopy(P, Path);
     TextRect := Rect(0, 0, Edit.ClientWidth, 255);
     DrawTextEx(DC, P, -1, TextRect, DT_MODIFYSTRING + DT_CALCRECT + DT_PATH_ELLIPSIS, nil);
     Result := P;
   finally
     StrDispose(P);
   end;
 finally
   ReleaseDC(Edit.Handle, DC);
 end;
end;


Vincero   (2010-04-07 22:07:00) [7]

Вроде бы помогло. Спасибо!


Игорь Шевченко   (2010-04-07 22:04:00) [8]


> Мне нужно знать, какой максимальный Canvas.TextWidth он
> может показать на экране


От шрифта зависит


Vincero   (2010-04-07 21:57:00) [9]


> Jeer ©   (07.04.10 21:56) [1]

Сейчас попробую.


Jeer   (2010-04-07 21:56:00) [10]

*.ClientWidth не помогает ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо