Форум: "Система";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
ВнизСоздание файла ресурсов. Найти похожие ветки
← →
Delphi 5.01 (2002-02-06 19:54) [0]Как можно создать файл ресурсов в котором будет находится нужныймне фаил а не BitMap, Cursor или Icon. Пожалуйста помогите не нашол в книге по дельфи и вообше в ФАКЕ тоже что делать?
← →
Anatoly Podgoretsky (2002-02-06 22:29) [1]Нужное_мне_имя тип нужный_мне_файл
Это в *.rc и подключить к проекту
← →
Pete (2002-02-07 15:20) [2]Пишешь:
resource.rc
Имя_ресурса RCDATA LOADONCALL имя_файла
brcc32 resource.rc получаешь *.res
и грузишь через Stream....
← →
Delphi 5.01 (2002-02-07 17:40) [3]Ну например мне нужно подцепить ыаил Font.ttf а потом в проге скопировать его в фонт каталог как можно ето сделать пожауйста обясните я с ресурсом в первые работаю.
Спасибо
← →
Pete (2002-02-08 10:17) [4]Ниже приведен код для Delphi 1, который динамически устанавливает шрифты, загружаемые только во время работы приложения. Вы можете расположить файл(ы) шрифтов в каталоге приложения. Они будут инсталлированы при загрузке формы и выгружены при ее разрушении. Вам возможно придется модифицировать код для работы с Delphi 2, поскольку он использует вызовы Windows API, которые могут как измениться, так и нет. Если в коде вы видите "...", то значит в этом месте может располагаться какой-либо код, не относящийся к существу вопроса.
Ну и, конечно, вы должны заменить "MYFONT" на реальное имя файла вашего шрифта.
-----------------------------------------------------------------type
TForm1=class( TForm )
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
...
private
{ Private declarations }
bLoadedFont: boolean;
public
{ Public declarations }
end;
procedure TForm1.FormCreate(Sender: TObject);
var sAppDir: string;
sFontRes: string;
begin
sAppDir := Application.ExeName;
sAppDir := copy( sAppDir, 1, rpos( "\", sAppDir ) );
sFontRes := sAppDir + "MYFONT.FOT";
if not FileExists( sFontRes ) then
begin
sFontRes := sFontRes + #0;
sFont := sAppDir + "MYFONT.TTF" + #0;
CreateScalableFontResource( 0, @sFontRes[ 1 ], @sFont[ 1 ], nil );
end;
sFontRes := sAppDir + "MYFONT.FOT";
if FileExists( sFontRes ) then
begin
sFontRes := sFontRes + #0;
if AddFontResource( @sFontRes[ 1 ] ) = 0 then
bLoadedFont := false
else
begin
bLoadedFont := true;
SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );
end;
end;
...
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
sFontRes: string;
begin
if bLoadedFont then
begin
sFontRes := sAppDir + "MYFONT.FOT" + #0;
RemoveFontResource( @sFontRes[ 1 ] );
SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );
end;
end;
Я поработал с данным кодом и внес некоторые поправки для корректной работы на Delphi 2.0. На Delphi 3.0 не испытано.
Электронная справка по продукту InstallShield показывает, что в системах Win95 и WinNT FOT-файл не нужен. Вам нужен только TTF-файл.
В результате процедура FormCreate стала выглядеть так:
-----------------------------------------------------------------var
sAppDir, sFontRes: string;
begin
{...другой код...}
sAppDir := extractfilepath(Application.ExeName);
sFontRes := sAppDir + "MYFONT.TTF";
if FileExists( sFontRes ) then
begin
sFontRes := sFontRes + #0;
if AddFontResource( @sFontRes[ 1 ] ) = 0 then
bLoadedFont := false
else
begin
bLoadedFont := true;
SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;
end;
{...}
end; {FormCreate}
А FormDestroy так:
-----------------------------------------------------------------var
sFontRes, sAppDir: string;
begin
{...другой код...}
if bLoadedFont then
begin
sAppDir := extractfilepath(Application.ExeName);
sFontRes := sAppDir + "MYFONT.TTF" + #0;
RemoveFontResource( @sFontRes[ 1 ] );
SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );
end;
{...другой код...}
end; {FormDestroy}
Для упрощения этого я сделал простую функцию, совмещающую обе этих задачи. Она возвращает логическое значение, говорящая об успехе, или наоборот, о неудаче операции загрузки или выгрузки шрифта.
-----------------------------------------------------------------{Функция загрузки и выгрузки шрифта.}
function LoadFont(sFontFileName: string; bLoadIt: boolean): boolean;
var
sFont, sAppDir, sFontRes: string;
begin
result := TRUE;
if bLoadIt then
begin
{Загрузка шрифта.}
if FileExists( sFontFileName ) then
begin
sFontRes := sFontFileName + #0;
if AddFontResource( @sFontRes[ 1 ] ) = 0 then
result := FALSE
else
SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );
end;
end
else
begin
{Выгрузка шрифта.}
sFontRes := sFontFileName + #0;
result := RemoveFontResource( @sFontRes[1] );
SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );
end;
end; {LoadFont}
Вот чти... взял из старого FAQ"а... надеюсь разберешься... и переделаешь под 5 или 6 Delphi. Не сложно.
← →
Evgeny (2002-02-08 10:38) [5]Ну и где же здесь работа с ресурсным файлом?
Да кстати Delphi немного отличается от C++. И команду LOADONCALL можно не указывать. Все равно BRCC32, поставляемый с Delphi, ее игнорирует.
← →
Pete (2002-02-08 11:20) [6]Я же говорю: Грузишь файл через TStream, сохраняешь,
и дальше как здесь написано...
← →
Pete (2002-02-08 13:04) [7]Кстати, возможно перепутал, вот еще вариант из другого FAQ"а:
Включение шрифта в ваш EXE:
Используйте ваш любимый текстовый редактор, создайте *.rc файл, описывающий шрифт:
--------------------------------------------------------------------------------
MY_FONT ANYOL1 "Bauhs93.ttf"
Первые два параметра могут быть любыми. Они будут использоваться в программе позже.
Затем для создания *.res файла используйте компилятор командной строки BRCC32.EXE, поставляемый с Delphi. Если ваш файл на этапе 1 был назван MyFont.rc, командная строка в сеансе DOS должна выглядеть так:
--------------------------------------------------------------------------------
BRCC32 MyFont
Программа добавит в компилируемый файл созданный ресурс .rc и создаст файл с тем же именем, за исключением расширения, которое будет .res: MyFont.res
В вашей программе добавьте директиву компилятора, чтобы включить вновь созданный файл:
--------------------------------------------------------------------------------
{$R MyFont.res}
Правильным будет разместить его в секции реализации после строчки {$R *.DFM}.
Добавьте процедуру создания файла из ресурса, делающим шрифт доступным для использования. Пример:
--------------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
Res : TResourceStream;
begin
Res := TResourceStream.Create(hInstance, "MY_FONT", Pchar("ANYOL1"));
Res.SavetoFile("Bauhs93.ttf");
Res.Free;
AddFontResource(PChar("Bauhs93.ttf"));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
Теперь вы можете использовать данный шрифт в своем приложении:
--------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Font.Name := "Bauhaus 93";
end;
Предостережения:
Приведенный пример не предусматривает никакой проверки и защиты от возможных ошибок.
Обратите внимание - имя файла НЕ такое же, как имя шрифта. Это допускает, что вы знаете имя шрифта и имя его ttf-файла. Вы можете определить это, дважды щелкнув на файле в окне Проводника.
Я рекомендую устанавливать файл шрифта в папку C:\WINDOWS\FONTS. Его легче отыскать потом именно там.
Ваш вновь установленный шрифт может быть удален программным путем, естественно, в случае, когда он никем не используется:
--------------------------------------------------------------------------------
procedure TForm1.FormDestroy(Sender: TObject);
begin
RemoveFontResource(PChar("Bauhs93.ttf"))
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
Для получения дополнительной справки по функциям AddFontResource и RemoveFontResource загляните в электронную справку по Win32.
← →
Delphi 5.01 (2002-02-08 20:21) [8]Большое тебее спасибо питя все схватываю на лету когда есть примеры вот ето клёва. Я все время мучался куда мне прятать секретные фаилы от проги теперь буду вживлать в ехе шник.
Спасибо всем кто помог решить проблемму если возникнут проблеммы с Апи обрашяйтесь могу помочь.
← →
Evgeny (2002-02-09 07:50) [9]Ну судя по вопросу, вряд ли можно ожидать какой либо реальной помощи. Тем более в таком вопросе как WinAPI.
← →
Pete (2002-02-09 09:05) [10]Нужна хорошая справка FAQ"и или примеры про работу с ТStream и TStreamFile. можно ссылку.
← →
Evgeny (2002-02-09 09:47) [11]Примеры найти очень легко. Смотришь исходники Delphi и берешь оттуда все что требуется.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.05.06;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c