![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
(API) Не могу текст переместить в нужное место на форме [D5]
ffo © (2006-08-22 21:37:00)Привет Мастера!
Создал экземпляр нового шрифта, задал ему цвет, поворот, фон...
надо теперь чтоб писаться он начинал в определенной точке формы с координатами i,j. Не получается.
Есть конечно и другие варианты работы со шрифтом на форме, но по ряду причин мне надо именно так (текст там будет состоять из 1-3 букв, ну да это уже ненужные подробности).
Вывожу текст так (выводится исключительно в верхний левый угол формы):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Str:String;
DC1:HDC;
F1: TLogFont;
NewFont1:HFont;
//NewBrush: HBrush;
//NewPen: HPen;
tRect1:TRect;
i:Integer =400;//куда хочу вывести
j:Integer =400;
implementation
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
DC1:= GetDC(Handle);
Str:='L';
try
FillChar(F1, SizeOf(F1), 0);
with F1 do
begin
lfHeight := 50;lfWeight := 0;lfEscapement:=0;
lfOrientation:=0;lfWeight:=fw_Normal;lfItalic:=0;lfUnderline:=0;lfStrikeOut:=0;l fCharSet:=Symbol_CharSet;
lfOutPrecision:=Out_Default_Precis;lfClipPrecision:=Clip_Default_Precis;lfQualit y:=Proof_Quality;
lfPitchAndFamily:=Fixed_Pitch or ff_Roman;StrPCopy(lfFaceName,'Times New Roman'{'SBAVIA'});
end;
NewFont1:= CreateFontIndirect(F1);
SelectObject(DC1,NewFont1);
// SetTextColor(DC1,clRed);
SetTextColor(DC1,clBlue);
SetBkMode(DC1,TRANSPARENT);
Canvas.PenPos:=Point(i,j);//Задал позицию курсора 300/300
tRect1:=Canvas.ClipRect;
DrawText(DC1,PChar(Str), -1,tRect1,dt_NoClip); //Работает !!!... но выводит черти куда
//Не работает
// SelectObject(DC1,NewFont1); SetTextColor(DC1,clRed); SetBkMode(DC1, TRANSPARENT);
// TextOut(DC1, 300,400,PChar(Str),Length(Str));
finally
ReleaseDC(Handle,DC1);//Освободили ссылку
DeleteDC(DC1);//Удалили ссылку
DeleteObject(NewFont1);
//DeleteObject(NewBrush); //Удалить объект
//DeleteObject(NewPen); //Удалить объект
end;
end;
end.
Ketmar (2006-08-22 22:36:00) [1]> [7] DiamondShark © (22.08.06 22:34)
на ахтунг? но это не ко мне, честно. меня с кем-то попутали! Йогг Сотот Ктулху Фхтагхн!
%-)
DiamondShark (2006-08-22 22:34:00) [2]Это вы на что намекаете?
ffo (2006-08-22 22:29:00) [3]
> Ketmar
Вопрос так и стоит...
Ketmar (2006-08-22 22:22:00) [4]> [4] Anatoly Podgoretsky © (22.08.06 22:18)
кстати, win32.hlp в данном случае и меня когда-то в тупик поставила. я понимал так, что передаваемый rect -- это всего лишь размеры. оказалось -- неправда, это позиция и размеры. %-)
Anatoly Podgoretsky (2006-08-22 22:18:00) [5]То есть будешь выяснять сколько у него вопросов?
ffo (2006-08-22 22:15:00) [6]
> интересно, нафига использовать API в данном VCL-приложении?
Да это не основное приложение, а вынесенный пример так сказать для отладки.
Иду проверять предложение
begin...end
Ketmar (2006-08-22 21:53:00) [7]интересно, нафига использовать API в данном VCL-приложении?
begin...end (2006-08-22 21:49:00) [8]> ffo © (22.08.06 21:37)
> tRect1:= Canvas.ClipRect;
> DrawText(DC1,PChar(Str), -1,tRect1,dt_NoClip);
???