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

Вниз

Сохранеие иконки в файл своего типа   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
15-1166388021
partizan
2006-12-17 23:40
2007.01.14
Вписать эллипс макс. площади в 4-угольник


2-1166659630
TeeChart
2006-12-21 03:07
2007.01.14
Работа с массивами данных


2-1166641009
Серый
2006-12-20 21:56
2007.01.14
stringGrid


1-1164102536
DelphiLexx
2006-11-21 12:48
2007.01.14
TTreeView определить стоит ли курсор на корне дерева


15-1166973440
palva
2006-12-24 18:17
2007.01.14
С рождеством тех,