Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Внизмне нужно получить длину текста из Edit в пикселях... Найти похожие ветки
← →
Кирилл (2002-12-06 10:56) [0]Подскажите пожалуйста, как мне получить длину текста из компонента Edit в пикселях. Функция Edit1.GetTextLen дает только число символов... А ведь там еще разный шрифт может быть...
Заранее благодарен!
← →
MBo (2002-12-06 10:59) [1]canvas.textwidth
а разного шрифта в edit не бывает
← →
Игорь Шевченко (2002-12-06 11:00) [2]
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;
← →
Song (2002-12-06 11:02) [3]DrawText()
← →
Skier (2002-12-06 11:03) [4]>Кирилл
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;
← →
Кирилл (2002-12-06 11:10) [5]Спасибо!
Мне конечно понравилось больше всего DrawText(), :) но я так понял,что нужно функцию использовать... Как только разберусь - с меня пиво! )
← →
Dmitry Rogov (2002-12-06 11:17) [6]GetTextExtentPoint32 не подойдет?
← →
Игорь Шевченко (2002-12-06 11:18) [7]Увы, DrawText здесь с напрягом...
← →
Кирилл (2002-12-06 11:27) [8]А как пользоваться GetTextExtentPoint32 ? Можно пример?
← →
Кирилл (2002-12-06 11:43) [9]2 Skier - а что за параметр:
const AWndHandle : THandle ?
← →
Skier (2002-12-06 11:45) [10]>Кирилл
ShowMessage(IntToStr(GetTextWidth(Edit1.Text, Edit1. Handle)));
Хэндл окна Edit1
← →
Кирилл (2002-12-06 11:57) [11]> Skier
строку FreeAndNil(ACanvas); пришлось стереть ) ... ну никак не хочет !
вроде бы работает, только вот когда я меняю размер шрифта у текста - функция выдает тоже число ( например при 1 символе - это число 6)
← →
Skier (2002-12-06 12:07) [12]>Кирилл
Попробуй это :
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 12:21) [13]УРААААА!!!!! ПОЛУЧИЛОСЬ!!!! СПАСИБО!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c