Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.06;
Скачать: CL | DM;

Вниз

шрифты   Найти похожие ветки 

 
copron   (2007-12-07 16:54) [0]

Подскажите, как во время работы программы можно загрузить свои шрифты и получить каждую букву отдельным изображением.


 
Dimaxx ©   (2007-12-07 17:24) [1]

Какие шрифты? ttf, fon или нарисованные в bmp виде набора изображений?


 
DiamondShark ©   (2007-12-07 17:27) [2]

The AddFontResource function adds the font resource from the specified file to the system font table.

The AddFontResourceEx function adds the font resource from the specified file to the system. Fonts added with the AddFontResourceEx function can be marked as private and not enumerable.

The GetGlyphOutline function retrieves the outline or bitmap for a character in the TrueType font that is selected into the specified device context.


 
copron   (2007-12-08 19:34) [3]

Что-то у меня не получается разобраться с параметрами функции GetGlyphOutline. И как получить дескриптор шрифта?


 
copron   (2007-12-09 08:58) [4]

уточню задание. Мне нужно в image вывести какую-либо букву выбранного шрифта.

procedure TForm1.Button2Click(Sender: TObject);
d: HDC;
GM: TGLYPHMETRICS;
M: TMat2;
begin
fontdialog1.Execute;
SelectObject(d,fontdialog1.Font.Handle);
?:=GetGlyphOutline(d,ord("d"),GGO_BITMAP,GM,?,?,M?);
end;


Какие параметры указывается за место ? и как потом вывести картинку в image?


 
Dib@zol ©   (2007-12-09 13:52) [5]

Во-первых: Ты DC сначала должен создать.


 
Dib@zol ©   (2007-12-09 14:47) [6]

Во-вторых, GetGlyphOutline он сцко сложный. Не легче ли например так?

function GetLtrBMP(F:HFONT; L:Char):HBITMAP;
var
 DC : HDC;
 TF, TB : HGDIOBJ;
 S : SIZE;
 P : PChar;
 R : TRect;
begin
 DC:=CreateCompatibleDC(0);
 TF:=SelectObject(DC, F);

 P:=PChar(string(L));
 GetTextExtentPoint32(DC, P, 1, S);
 FillChar(R, SIZEOF(TRect), 0);
 R.Right:=S.cx;
 R.Bottom:=S.cy;
 Result:=CreateBitmap(R.Right, R.Bottom, 1, 32, nil);
 TB:=SelectObject(DC, Result);

 FillRect(DC, R, GetStockObject(GRAY_BRUSH));
 SetBkMode(DC, TRANSPARENT);
 DrawText(DC, P, 1, R, DT_SINGLELINE or DT_CENTER or DT_VCENTER);

 SelectObject(DC, TB);
 SelectObject(DC, TF);
 DeleteDC(DC);
end;

ЗЫ PChar(string(L)) - канешна не верх изящества, но просто PChar(L) работать отказывается.


 
copron   (2007-12-09 20:09) [7]

Спасибо. Но если я пишу следующее

image1.Picture.Bitmap.Handle:=GetLtrBMP(fontdialog1.Font.Handle,"d");

функция не работает.


 
copron   (2007-12-09 20:11) [8]

то есть ничего не отображается.


 
Dib@zol ©   (2007-12-09 20:17) [9]

Какой шрифт выбираешь? Только что перебрал десяток шрифтов - всё пашет...


 
copron   (2007-12-09 20:24) [10]

Ну допустим Arial...
В функции ничего не менял.


 
copron   (2007-12-09 20:33) [11]

Вот полный текст

unit main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Image1: TImage;
   Button1: TButton;
   Image2: TImage;
   Button2: TButton;
   FontDialog1: TFontDialog;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function GetLtrBMP(F:HFONT; L:Char):HBITMAP;
var
DC : HDC;
TF, TB : HGDIOBJ;
S : SIZE;
P : PChar;
R : TRect;
begin
DC:=CreateCompatibleDC(0);
TF:=SelectObject(DC, F);

P:=PChar(string(L));
GetTextExtentPoint32(DC, P, 1, S);
FillChar(R, SIZEOF(TRect), 0);
R.Right:=S.cx;
R.Bottom:=S.cy;
Result:=CreateBitmap(R.Right, R.Bottom, 1, 32, nil);
TB:=SelectObject(DC, Result);

FillRect(DC, R, GetStockObject(GRAY_BRUSH));
SetBkMode(DC, TRANSPARENT);
DrawText(DC, P, 1, R, DT_SINGLELINE or DT_CENTER or DT_VCENTER);

SelectObject(DC, TB);
SelectObject(DC, TF);
DeleteDC(DC);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Canvas.FillRect(ClientRect);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
fontdialog1.Execute;
image1.Picture.Bitmap.Handle:=GetLtrBMP(fontdialog1.Font.Handle,"d");
end;

end.


 
Dib@zol ©   (2007-12-09 20:34) [12]

Попробуй закомментировать FillRect и SetBkMode.


 
copron   (2007-12-09 20:49) [13]

Не помогает :(
Может надо в image какие-нибудь параметры выставить?


 
Dib@zol ©   (2007-12-09 21:02) [14]

Никаких. Попробуй на пустом проекте. У меня сразу заработало...


 
copron   (2007-12-09 21:10) [15]

Все равно не пашет :(
Не мог бы ты исходники залить на вебфайл или айфолдер.


 
Dib@zol ©   (2007-12-09 21:17) [16]

http://webfile.ru/1634476


 
copron   (2007-12-09 21:21) [17]

Ты не поверишь, но даже твоя прога у меня не работает!


 
copron   (2007-12-09 21:21) [18]

У меня истерика :(



Страницы: 1 вся ветка

Текущий архив: 2008.01.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
6-1177413145
DVM
2007-04-24 15:12
2008.01.06
Почему начинает подтормаживать сервер.


2-1197047053
Res
2007-12-07 20:04
2008.01.06
Подскажите


2-1197056115
AntiPupkin
2007-12-07 22:35
2008.01.06
Перечислить ID потоков в открытом процессе


2-1197293417
kyn66
2007-12-10 16:30
2008.01.06
Рисование на канве Image


15-1196686111
@!!ex
2007-12-03 15:48
2008.01.06
ATX матери не подходит питание от ATX БП.