Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по сохранению иконки [D6, WinXP]


msoftware ©   (2003-02-04 14:07:00) 

Здравствуйте мастера! Вопрос есть один:
Ниже представлен один код, но там какая-то ошибка, непойму:
typeFSM = record
...
FrmMain_Width: integer;
...
FrmMain_Height: integer;
...
VertMenu_BtnImages: array[0..10] of array[0..55] of TIcon; //Трехмерный массив
...
end;

...

procedureTfrmMain.FormCreate(Sender: TObject);
varf: Fileof FSM;
GSet: FSM;
Icon: TIcon;
begin
Icon:=TIcon.Create;
ImageList2.AddIcon(GSet.VertMenu_BtnImages[0][0]);
END;

МОЖЕТ КТО ЗНАЕТ В ЧЕМ ЗДЕСЬ ДЕЛО???


msoftware   (2003-02-05 11:00:00) [1]

УУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУРРРРРРРРРРРРРРРРРРРРРРРРРРРАААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
У МЕНЯ ПОЛУЧИИИИИИИИИИИЛЛЛЛЛЛЛОООООООООООООООООООООССССССССЬЬЬЬЬЬЬЬ!!!!!!!!!!!!!!!!!!!!!
ТОЛЬКО СОХРАНЯЕТ В 16 ЦВЕТОВ, никто незнает как сохранять в hicolor"e


Anatoly Podgoretsky   (2003-02-05 09:49:00) [2]

Тут обсуждать абсолютно нечего, это просто надо все удалить.
Взяться за учебники по Дельфи.


msoftware   (2003-02-05 09:29:00) [3]

> han_malign ©
Самый простой исходничок не подкинешь?


han_malign   (2003-02-04 14:45:00) [4]

Ну-ну:
1. Зачем вообще - Icon:=TIcon.Create; - абсолютно ничего, кроме утечек памяти, не делающий код (то есть зачем он был изначально, до твоих переделок, понятно - для создания буфферного экземпляра межде файлом и TImageList-ом)
2. Если записал в файл указатель на экземпляр класса, а потом считал в другом сеансе, то это будет просто указатель на произвольный блок памяти.
3. LoadFromStream и SaveToStream не просто так к TIcon прицеплен, никто за тебя содержимое экземпляра по указателю на него(элементу массива) сохранять и восстанавливать не будет.

Короче сохранять и восстанавливать массив икон надо поэлементно, через LoadFromStream и SaveToStream, причем должен понимать что TIcon(nil).LoadFromStream/SaveToStream - Access Violation.


msoftware   (2003-02-04 14:39:00) [5]

Ну че никто ни знает шоли???


msoftware   (2003-02-04 14:20:00) [6]

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ОЙ-Ой извиняюсь недописал, торопился вот он:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


----------
СЧИТЫВАНИЕ ИЗ ФАЙЛА
----------

type FSM = record
...
FrmMain_Width: integer;
...
FrmMain_Height: integer;
...
VertMenu_BtnImages: array[0..10] of array[0..55] of TIcon; //Трехмерный массив
...
end;

...

procedureTfrmMain.FormCreate(Sender: TObject);
varf: File ofFSM;
GSet: FSM;
Icon: TIcon;
begin
Icon:=TIcon.Create;
AssignFile(f,"MailSettings.fsm");
Reset(f);
Read(f,GSet);
ImageList2.AddIcon(GSet.VertMenu_BtnImages[0][0]);
END;
---------
ЗАПИСЬ В ФАЙЛ
----------


procedureTfrmMain.FormDestroy(Sender: TObject);
varf: File of FSM;
Save: FSM;
Icon: TIcon;
begin
Icon:=TIcon.Create;
assignFile(f,"MailSettings.fsm");
reset(f);
ImgIndex:=VertMenu.GetHeaderByIndex(H).GEtButtonByIndex(B).ImageIndex;
ImageList2.GetIcon(0,Save.VertMenu_BtnImages[0][0]);
write(f,Save);
closeFile(f);


han_malign   (2003-02-04 14:16:00) [7]

Создаешь какую-то пустую пиктограмму(Icon), ссылку на которую(а значит и память) тут-же теряешь, а потом пытаешся вставить в лист левый, и вероятно несуществующий объект (типа TIcon) из массива который забит стековым мусором (локальная запись GSet - нигде не инициализируется)
- и что по твоему должно получиться


Наверх

Титульная страница Поиск, карта сайта Написать письмо