Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1166702224
KatE*
2006-12-21 14:57
2007.01.14
Помогите сделать лёгкую прогу!!!!!!!!!!!


6-1155759578
RuzL
2006-08-17 00:19
2007.01.14
Троян


15-1166985313
sinus
2006-12-24 21:35
2007.01.14
Ищу компонент...


2-1167002092
Vladimir1984
2006-12-25 02:14
2007.01.14
Как получить цвет отдельного пикселя на панели...


1-1163786612
DarkFlow
2006-11-17 21:03
2007.01.14
Playlist как у Winamp





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский