![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
мне нужно получить длину текста из 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 не бывает