Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.48 MB
Время: 0.005 c
1-17555
nomshar
2002-04-22 02:53
2002.05.06
Организация выпадающего списка в текстовом редакторе


14-17691
herosofnn
2002-03-16 10:33
2002.05.06
Microsoft exchange


6-17662
ATLANTIDO
2002-02-19 20:01
2002.05.06
ПОДАВИТЬ ОШИБКУ


1-17552
sergey32
2002-04-24 10:22
2002.05.06
DateTimePicker глючит


3-17508
Евкисий
2002-04-11 20:13
2002.05.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский