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

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

мне нужно получить длину текста из Edit в пикселях... [D3, Win95/98]


Кирилл ©   (2002-12-06 10:56:00) 

Подскажите пожалуйста, как мне получить длину текста из компонента Edit в пикселях. Функция Edit1.GetTextLen дает только число символов... А ведь там еще разный шрифт может быть...
Заранее благодарен!


Кирилл   (2002-12-06 12:21:00) [1]

УРААААА!!!!! ПОЛУЧИЛОСЬ!!!! СПАСИБО!!!


Skier   (2002-12-06 12:07:00) [2]

>Кирилл

Попробуй это :

type
THackControl = class(TControl);

//............................

procedure TForm1.Button3Click(Sender: TObject);
function GetTextWidth(const AText : String; const AWinControl : TWinControl) : Integer;
var
ACanvas : TCanvas;
begin
Result := 0;
if AText= EmptyStr then Exit;
ACanvas := TCanvas.Create;
ACanvas.Handle := GetDC(AWinControl.Handle);
try
ACanvas.Font.Assign(THackControl(AWinControl).Font);
Result := ACanvas.TextWidth(AText);
finally
ReleaseDC(AWinControl.Handle, ACanvas.Handle);
FreeAndNil(ACanvas);
end; //try
end; //GetTextWidth
begin
ShowMessage(IntToStr(GetTextWidth(Edit1.Text, Edit1)));
end;


Кирилл   (2002-12-06 11:57:00) [3]

> Skier
строку FreeAndNil(ACanvas); пришлось стереть ) ... ну никак не хочет !
вроде бы работает, только вот когда я меняю размер шрифта у текста - функция выдает тоже число ( например при 1 символе - это число 6)


Skier   (2002-12-06 11:45:00) [4]

>Кирилл
ShowMessage(IntToStr(GetTextWidth(Edit1.Text, Edit1. Handle)));
Хэндл окна Edit1


Кирилл   (2002-12-06 11:43:00) [5]

2 Skier - а что за параметр:
const AWndHandle : THandle ?


Кирилл   (2002-12-06 11:27:00) [6]

А как пользоваться GetTextExtentPoint32 ? Можно пример?


Игорь Шевченко   (2002-12-06 11:18:00) [7]

Увы, DrawText здесь с напрягом...


Dmitry Rogov   (2002-12-06 11:17:00) [8]

GetTextExtentPoint32 не подойдет?


Кирилл   (2002-12-06 11:10:00) [9]

Спасибо!
Мне конечно понравилось больше всего DrawText(), :) но я так понял,что нужно функцию использовать... Как только разберусь - с меня пиво! )


Skier   (2002-12-06 11:03:00) [10]

>Кирилл
procedure TForm1.Button3Click(Sender: TObject);
function GetTextWidth(const AText : String; const AWndHandle : THandle) : Integer;
var
ACanvas : TCanvas;
begin
Result := 0;
if AText= EmptyStr then Exit;
ACanvas := TCanvas.Create;
ACanvas.Handle := GetDC(AWndHandle);
try
Result := ACanvas.TextWidth(AText);
finally
ReleaseDC(AWndHandle, ACanvas.Handle);
FreeAndNil(ACanvas);
end; //try
end; //GetTextWidth
begin
ShowMessage(IntToStr(GetTextWidth(Edit1.Text, Edit1.Handle)));
end;


Song   (2002-12-06 11:02:00) [11]

DrawText()


Игорь Шевченко   (2002-12-06 11:00:00) [12]


function GetTextWidthInPixels(AText: string; AControl: TControl): integer;
var
propInfo: PPropInfo;
thisFont: TFont;
begin
Result := 0;

propInfo := GetPropInfo(AControl.ClassInfo, "Font");

if propInfo <> nil then begin
thisFont := TFont(GetObjectProp(AControl, "Font"));

if Assigned(thisFont) then
with TControlCanvas.Create do
try
Control := AControl;
Font.Assign(thisFont);
Result := TextWidth(AText);
finally
Free;
end;
end;
end;


MBo   (2002-12-06 10:59:00) [13]

canvas.textwidth
а разного шрифта в edit не бывает


Наверх

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