Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1196257475
em240
2007-11-28 16:44
2008.01.06
.net+производительность gui приложений


2-1197037104
Nikfel
2007-12-07 17:18
2008.01.06
Получение времени работы компьютера.


15-1196611257
begin...end
2007-12-02 19:00
2008.01.06
Шоу двойников...


15-1196713499
Ega23
2007-12-03 23:24
2008.01.06
Я что-то пропустил?


15-1196685094
ArtemESC
2007-12-03 15:31
2008.01.06
Новая больная идея!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский