Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизСохранеие иконки в файл своего типа Найти похожие ветки
← →
XfroSt (2006-12-09 21:22) [0]Подскажите... Дело такое:
у меня есть совой тип :type
TComFile = record
Name : string[20];
Command : string[150];
Icon : какой тип выбрать
end;
Какой тип выбрать для Icon
что бы можно было сохранять в файл иконку и потом читать ее.
И как вообще сохранять иконку к прмеру из TImage,
я работаю со своим файлом такvar
F : file of TComFile;
P : TComFile;
begin
AssignFile(F,savedlg.FileName);
Rewrite(F);
try
P.Name := "111";
P.Command := "22";
Write (F, P);
finally
CloseFile(F);
end;
end;
а читаю так
begin
AssignFile(F,Opendlg.FileName);
Reset(F);
comLV.Clear;
try
while not Eof(F) do
begin
Read (F, P);
end;
finally
CloseFile(F);
end;
lb.caption := P.name;
lb2.caption := P.comm;
Image1. как загрузить иконку из моего файла в TImage
end;
Как это сделать ? сохранить а потом прочитать ?
← →
Джо © (2006-12-09 21:42) [1]> Какой тип выбрать для Icon
> что бы можно было сохранять в файл иконку и потом читать
> ее.
TIcon, например.
← →
XfroSt (2006-12-11 21:18) [2]так он будет сохранять только указатель на раздел памяти, Но не сам файл !!! поэтому надо по-другому TBitmap тоже не сохраняет (сам файл) тока указатели... как же быть ?
← →
Джо © (2006-12-11 21:33) [3]У TIcon, если не в курсе, есть метод SaveToStream.
← →
Джо © (2006-12-11 21:34) [4]Такожде и TBitmap.
← →
XfroSt (2006-12-11 21:45) [5]и как это будет выглядить ?
type
TComFile = record
Name : string[20];
Command : string[150];
Icon : TSream;
end;
при сохраненииP.name := "1111";;
P.Icon := TStream.Create;
imIcon.Picture.Bitmap.SaveToStream(P.Icon);
Write (F,P);
где imIcon это TImage в который предварительно загружена нужная иконка
тоже самое ! сохраняет тока указатель ! как сохранить иконку ? не в отдельный файл а именно в файл своего типа ? Может я не так сохраняю поток ?
← →
Джо © (2006-12-11 22:25) [6]
TComFile = record
Name : string[20];
Command : string[150];
Icon : TIcon;
end;
У тебя есть поток AStream, в который ты сохраняешь данные. Иконку в него сохраняешь так: ComFile.Icon.SaveToStream(AStream).
← →
oxffff © (2006-12-11 22:42) [7]Тебе надо пересмотреть схему сохранения.
Отказаться От типизированых файлов.
Или сохранять иконки только определенного размера.
type
TComFile = record
Name : string[20];
Command : string[150];
Icon : какой тип выбрать
end;
F : file of TComFile;
Write (F, P);
Это не подойдет
Тебе уже Джо © дал намек
← →
AndreyRu (2006-12-12 00:16) [8]type
TIconBytes = array of byte;
TComFile = packed record
Name : string[20];
Command : string[150];
IconSize : Cardinal;
end;
...
...
...
//-------------------------------------------------------------------
procedure WriteIcoFile(IconFileName, SaveFileName : TFileName; Name, Command : string);
var
fs, ifl : TFileStream;
fl : TComFile;
i : integer;
b : byte;
begin
fl.Name := Name;
fl.Command := Command;
fs := TFileStream.Create(FileName, fmOpenRead);
fl.IconSize := fs.Size;
ifl := TFileStream.Create(SaveFileName, fmCreate);
ifl.WriteBuffer(fl, SizeOf(fl));
for i := 0 to fl.IconSize-1 do
begin
fs.ReadBuffer(b, 1);
SetLength(fl.Icon, Length(fl.Icon)+1);
ifl.WriteBuffer(b, 1);
end;
ifl.Free;
fs.Free;
end;
//-------------------------------------------------------------------
function ReadIcoFile(FileName : TFileName; var Name, Command : string) : TIconBytes;
var
fs : TFileStream;
ComFile : TComFile;
b : Byte;
i : integer;
begin
fs := TFileStream.Create(FileName, fmOpenRead);
fs.ReadBuffer(ComFile, SizeOf(ComFile));
Name := ComFile.Name;
Command := ComFile.Command;
SetLength(Result, ComFile.IconSize);
for i := 0 to ComFile.IconSize-1 do
begin
fs.ReadBuffer(b, 1);
Result[Length(Result)-1] := b;
end;
fs.Free;
end;
//-------------------------------------------------------------------
← →
Vovan#2 (2006-12-12 00:26) [9]>Отказаться От типизированых файлов.
Назад, отступаем!.. Они слишком сильны!..
2 XfroSt:
Если хочешь по-своему, то выбери тип:
tmyfunnyicon = record
Has32: Boolean;
Has16: Boolean;
Has48: Boolean;
Ico32: array [0..32*32-1] of TRGBQuad;
Ico16: array [0..16*16-1] of TRGBQuad;
Ico48: array [0..48*48-1] of TRGBQuad;
← →
XfroSt (2006-12-12 01:27) [10]спасибо, но явышел из этой проблемы несколько по иному....
← →
XfroSt (2006-12-12 01:30) [11]2 Vovan#2
Оригинально .. надо попробовать
← →
oxffff © (2006-12-12 09:00) [12]
> Vovan#2 (12.12.06 00:26) [9]
> >Отказаться От типизированых файлов.
>
> Назад, отступаем!.. Они слишком сильны!..
>
> 2 XfroSt:
>
> Если хочешь по-своему, то выбери тип:
>
>
> tmyfunnyicon = record
> Has32: Boolean;
> Has16: Boolean;
> Has48: Boolean;
> Ico32: array [0..32*32-1] of TRGBQuad;
> Ico16: array [0..16*16-1] of TRGBQuad;
> Ico48: array [0..48*48-1] of TRGBQuad;
Ого. Да ты крут, как КНУТ.
← →
XfroSt (2006-12-22 20:50) [13]Все спасибо я реншил этот вопрос.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c