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

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

(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);

???


Наверх

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