Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ограничение на количество картинок?
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
ARTHES
Здравствуйте! Может кто подскажет, как решить такую проблему:
Пишу проект с развитым так сказать графическим оформлением, каждая кнопочка и т.д. прорисовывалась в фотошопе как отдельная картинка. Но проект не маленький, и картинок этих накопилось уже около 250-300, каждая весит от 20 Kb до 100 Kb, все вместе они где-то 8 Mb.
Так вот, при работе программы в определенный момент выкидывает ошибку открытия картинки:

...exception class EFOpenError with message 'Cannot open file images\buttons\us_edit_user.jpg'...

А картинка эта там все-таки есть. Причем после этого "события" ни одну картинку билдер уже не может открыть, даже те, которые только что открывал. Картинки загружаю так:

Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user.jpg");

Причем если закомментировать открытие картинок раньше в проекте, работа программы НЕ "продвигается" дальше, опять на том же шаге выдает такую же ошибку открытия картинки. Если же закомментировать открытие той картинки, на которой вылетает ошибка, то ошибка эта вылетает уже на следующей попытке открыть другую картинку.

Что было уже сделано:
- в Google ничего похожего не нашел;
- везде где использовал new использовал и delete;
- переместил из папки images\\... все бэкапы картинок и бэкапные *.psd-файлы в другое место, тем самым уменьшил вес папки в 15 раз, а количество в ней файлов в 3 раза;
- пересохранил 116 картинок с меньшим качеством, уменьшил тем самым вес еще 800 Kb;

НИЧЕГО из этого абсолютно никак не повлияло на работу программы, она вылетает в том же месте.

Может кто подскажет:
1. может ли быть такое, что в билдере есть какое-то ограничение на количество используемых в проекте картинок
2. может можно как-то ЧИСТИТЬ ПАМЯТЬ от картинок, которые были загружены на предыдущей форме, а на этой уже не используются
3. имеет ли смысл загружать картинки на каждую форму по мере открытия этой формы, а не на FormCreate , как это сделано у меня сейчас

Заранее благодарен.
European
Цитата(ARTHES @ 12:02:2007, 12:42 )
2. может можно как-то ЧИСТИТЬ ПАМЯТЬ от картинок, которые были загружены на предыдущей форме, а на этой уже не используются
*

В общем случае, после разрушения формы память будет очищена автоматически, если контролы были созданы в Design Time. Стоит только убедится, что форма действительно разрушается, а не скрывается, т.е. в Close формы должно стоять Action = caFree.
Ошибка явно из-за того, что доступ к файлу закрыт. К сожалению, хелпа под рукой нет, так что подробнее сказать ничего не могу.
Цитата(ARTHES @ 12:02:2007, 12:42 )
3. имеет ли смысл загружать картинки на каждую форму по мере открытия этой формы,
*

Это как? Я что-то не очень понял
ARTHES
Спасибо за идею, сейчас буду со всем этим разбираться, а пока везде где нашел поменял Hide() на Close(), но не помогло.

3. имеет ли смысл загружать картинки на каждую форму по мере открытия этой формы - имел ввиду оставлять на форме картинки пустые, на FormActivate загружать, на FormDeactivate делать картинку опять пустой, т.е. Image7->Picture->None
European
Цитата(ARTHES @ 12:02:2007, 13:29 )
везде где нашел поменял Hide() на Close(), но не помогло.
*

В FormClose стоит Action = caFree?
Цитата(ARTHES @ 12:02:2007, 13:29 )
оставлять на форме картинки пустые, на FormActivate загружать, на FormDeactivate делать картинку опять пустой, т.е. Image7->Picture->None
*

ИМХО, не стоит, т.к. лишняя возня, не дающая какого-нибудь выйгрыша
ARTHES
На всех формах на onClose поставил Action = caFree, теперь на том же месте выдает ошибку:

...class EAccessViolation with message 'Access violation at address 0001001D. Write of adress 3A004300'...

ошибка вылетает или при загрузке формы, или при каком-либо действии на этой форме. Если на этой форме комментирую Action = caFree , получаю привычную ошибку открытия картинки. Может просто форму эту удалить и создать заново?
European
Цитата(ARTHES @ 12:02:2007, 13:53 )
...class EAccessViolation with message 'Access violation at address 0001001D. Write of adress 3A004300'...
*

Если вылетает такое эксепшн, то дело явно не чисто. Без кода тут фиг что скажешь
ARTHES
даже и не знаю, поможет ли код, просто его так много... и вроде ничего особенного там нет...

Короче есть у меня в проге такая функция сохранения (удаления/редактирования) списка пользователей, который хранится в файле users.ini, и сохранения лога запуска программы и ее использования, который хранится в файле log +дата+время.log
При работе программы сразу загружается:
окно списка пользователей, на котором есть ListBox(в котором и есть список пользователей), кнопки типа "редактировать запись", "удалить запись", "новая запись" (выполнены в виде картинок). Кнопки эти пока не работают(еще не написал), но при загрузке формы кнопки "редактировать запись", "удалить запись" неактивны (одна картинка) пока не выберешь пользователя в ListBox-е,а как выберешь становятся активными(другая картинка):

Form Create:

[
void __fastcall TForm7::FormCreate(TObject *Sender)
{
GlobalWAS_modified = false;

usr_selected = false;
ListBox1->Clear();

FILE *stream;

stream = fopen("D:\\RESEARCH\\users\\users.ini", "r");

fgets(temp_str, 3, stream);
avail_usr_cnt = StrToInt(temp_str);
int k;

for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream);

fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n1_length[i] = k;

fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n2_length[i] = k;

fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n3_length[i] = k;

fgets(usr_pssw_str, 6, stream);
usr_pssw[i] = usr_pssw_str; //password of i. user
}

fclose(stream);

//--- one more time smile.gif ---//

FILE *stream2;

stream2 = fopen("D:\\RESEARCH\\users\\users.ini", "r");

fgets(temp_str, 3, stream2);

for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream2);

fgets(usr_name_str, usr_n1_length[i], stream2);
usr_name1[i] = usr_name_str; //1. name of i. user
//ListBox1->Items->Add(usr_name1[i]);

fgets(temp_str, 3, stream);

fgets(usr_name_str, usr_n2_length[i], stream2);
usr_name2[i] = usr_name_str; //2. name of i. user

fgets(temp_str, 3, stream);

fgets(usr_name_str, usr_n3_length[i], stream2);
usr_name3[i] = usr_name_str; //3. name of i. user

FULL_name[i] = usr_name1[i] + " " + usr_name2[i] + " " + usr_name3[i];
ListBox1->Items->Add(FULL_name[i]);

fgets(temp_str, 3, stream);

fgets(usr_pssw_str, 6, stream);
}
fclose(stream2);
Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user_unactive.jpg");
Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user_unactive.jpg");
}
]

Form Activate:

[
void __fastcall TForm7::FormActivate(TObject *Sender)
{
if(GlobalWAS_modified == true)
{
usr_selected = false;

ListBox1->Clear();

FILE *stream;

stream = fopen("D:\\RESEARCH\\users\\users.ini", "r");

fgets(temp_str, 3, stream);
avail_usr_cnt = StrToInt(temp_str);
int k;

for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream);

fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n1_length[i] = k;

fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n2_length[i] = k;

fgets(usr_name_str, 25, stream);
just_str = usr_name_str; //get the
k = just_str.Length(); // length of the string
usr_n3_length[i] = k;

fgets(usr_pssw_str, 6, stream);
usr_pssw[i] = usr_pssw_str; //password of i. user
}

fclose(stream);

//--- one more time smile.gif ---//

FILE *stream2;

stream2 = fopen("D:\\RESEARCH\\users\\users.ini", "r");

fgets(temp_str, 3, stream2);

for(int i=0;i<avail_usr_cnt;i++)
{
fgets(temp_str, 3, stream2);

fgets(usr_name_str, usr_n1_length[i], stream2);
usr_name1[i] = usr_name_str; //1. name of i. user
//ListBox1->Items->Add(usr_name1[i]);

fgets(temp_str, 3, stream);

fgets(usr_name_str, usr_n2_length[i], stream2);
usr_name2[i] = usr_name_str; //2. name of i. user

fgets(temp_str, 3, stream);

fgets(usr_name_str, usr_n3_length[i], stream2);
usr_name3[i] = usr_name_str; //3. name of i. user

FULL_name[i] = usr_name1[i] + " " + usr_name2[i] + " " + usr_name3[i];
ListBox1->Items->Add(FULL_name[i]);

fgets(temp_str, 3, stream);

fgets(usr_pssw_str, 6, stream);
}
fclose(stream2);

Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user_unactive.jpg");
Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user_unactive.jpg");
}
]

ListBox1Click:

[
for(int i=0;i<ListBox1->Items->Count;i++)
{
if(ListBox1->Selected[i])
{
usr_selected = true;
Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user.jpg");
Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user.jpg");
GlobalF_usr = usr_name1[i];
GlobalI_usr = usr_name2[i];
GlobalO_usr = usr_name3[i];
GlobalPSW_usr = usr_pssw[i];
}
}
]

FormClose:

[
void __fastcall TForm7::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
]

Еще на этой форме есть кнопки "доступ"(просмотр log-файлов) и "протоколы". Эти кнопки просто перекидывают на новые почти пустые окна окна, на которых пока(еще не написал) ничего кроме загрузки картинок не происходит.

Так вот ошибка вылетает когда я из любого окна "доступ" и "протоколы" перехожу на окно "пользователи" и выбираю в ListBox-е пользователя. Причем ошибка ОТКРЫТИЯ КАРТИНКИ вылетает, если во всех этих трех формах Action = caFree НЕТУ (в остальных во всех есть), а АКСЕСС ВИАЛЕЙШН когда ХОТЯ бы в ОДНОМ из этих трех файлов в FormClose Action = caFree ЕСТЬ, причем вылетает уже еще только на загрузке формы "пользователи".

Может проще все-таки переписать эту форму заново???
ARTHES
ИЗВИНЯЮСЬ, сейчас код перепишу нормально(а то ж не читается):

Короче есть у меня в проге такая функция сохранения (удаления/редактирования) списка пользователей, который хранится в файле users.ini, и сохранения лога запуска программы и ее использования, который хранится в файле log +дата+время.log
При работе программы сразу загружается:
окно списка пользователей, на котором есть ListBox(в котором и есть список пользователей), кнопки типа "редактировать запись", "удалить запись", "новая запись" (выполнены в виде картинок). Кнопки эти пока не работают(еще не написал), но при загрузке формы кнопки "редактировать запись", "удалить запись" неактивны (одна картинка) пока не выберешь пользователя в ListBox-е,а как выберешь становятся активными(другая картинка):
Код
void __fastcall TForm7::FormCreate(TObject *Sender)
{
GlobalWAS_modified = false;

usr_selected = false;
ListBox1->Clear();

FILE *stream;

stream = fopen("D:\\RESEARCH\\users\\users.ini", "r");

fgets(temp_str, 3, stream);
avail_usr_cnt = StrToInt(temp_str);
int k;

for(int i=0;i<avail_usr_cnt;i++)
{
        fgets(temp_str, 3, stream);

        fgets(usr_name_str, 25, stream);
        just_str = usr_name_str;           //get the
        k = just_str.Length();            //   length of the string
        usr_n1_length[i] = k;

        fgets(usr_name_str, 25, stream);
        just_str = usr_name_str;           //get the
        k = just_str.Length();            //   length of the string
        usr_n2_length[i] = k;

        fgets(usr_name_str, 25, stream);
        just_str = usr_name_str;           //get the
        k = just_str.Length();            //   length of the string
        usr_n3_length[i] = k;

        fgets(usr_pssw_str, 6, stream);
        usr_pssw[i] = usr_pssw_str;        //password of i. user
}

fclose(stream);

//--- one more time :) ---//

FILE *stream2;

stream2 = fopen("D:\\RESEARCH\\users\\users.ini", "r");

fgets(temp_str, 3, stream2);

for(int i=0;i<avail_usr_cnt;i++)
{
        fgets(temp_str, 3, stream2);

        fgets(usr_name_str, usr_n1_length[i], stream2);
        usr_name1[i] = usr_name_str;       //1. name of i. user
        //ListBox1->Items->Add(usr_name1[i]);

        fgets(temp_str, 3, stream);

        fgets(usr_name_str, usr_n2_length[i], stream2);
        usr_name2[i] = usr_name_str;       //2. name of i. user

        fgets(temp_str, 3, stream);

        fgets(usr_name_str, usr_n3_length[i], stream2);
        usr_name3[i] = usr_name_str;       //3. name of i. user

        FULL_name[i] = usr_name1[i] + " " + usr_name2[i] + " " + usr_name3[i];
        ListBox1->Items->Add(FULL_name[i]);

        fgets(temp_str, 3, stream);
        
        fgets(usr_pssw_str, 6, stream);
}
fclose(stream2);
  Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user_unactive.jpg");
  Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user_unactive.jpg");
}


Код
void __fastcall TForm7::FormActivate(TObject *Sender)
{
if(GlobalWAS_modified == true)
{
  usr_selected = false;

  ListBox1->Clear();

  FILE *stream;

  stream = fopen("D:\\RESEARCH\\users\\users.ini", "r");

  fgets(temp_str, 3, stream);
  avail_usr_cnt = StrToInt(temp_str);
  int k;

  for(int i=0;i<avail_usr_cnt;i++)
  {
        fgets(temp_str, 3, stream);

        fgets(usr_name_str, 25, stream);
        just_str = usr_name_str;           //get the
        k = just_str.Length();            //   length of the string
        usr_n1_length[i] = k;

        fgets(usr_name_str, 25, stream);
        just_str = usr_name_str;           //get the
        k = just_str.Length();            //   length of the string
        usr_n2_length[i] = k;

        fgets(usr_name_str, 25, stream);
        just_str = usr_name_str;           //get the
        k = just_str.Length();            //   length of the string
        usr_n3_length[i] = k;

        fgets(usr_pssw_str, 6, stream);
        usr_pssw[i] = usr_pssw_str;        //password of i. user
  }

  fclose(stream);

  //--- one more time :) ---//

  FILE *stream2;

  stream2 = fopen("D:\\RESEARCH\\users\\users.ini", "r");

  fgets(temp_str, 3, stream2);

  for(int i=0;i<avail_usr_cnt;i++)
  {
        fgets(temp_str, 3, stream2);

        fgets(usr_name_str, usr_n1_length[i], stream2);
        usr_name1[i] = usr_name_str;       //1. name of i. user
        //ListBox1->Items->Add(usr_name1[i]);

        fgets(temp_str, 3, stream);

        fgets(usr_name_str, usr_n2_length[i], stream2);
        usr_name2[i] = usr_name_str;       //2. name of i. user

        fgets(temp_str, 3, stream);

        fgets(usr_name_str, usr_n3_length[i], stream2);
        usr_name3[i] = usr_name_str;       //3. name of i. user

        FULL_name[i] = usr_name1[i] + " " + usr_name2[i] + " " + usr_name3[i];
        ListBox1->Items->Add(FULL_name[i]);

        fgets(temp_str, 3, stream);
        
        fgets(usr_pssw_str, 6, stream);
  }
  fclose(stream2);

  Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user_unactive.jpg");
  Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user_unactive.jpg");
}
}


Выбор пользователя:

Код
void __fastcall TForm7::ListBox1Click(TObject *Sender)
{
        for(int i=0;i<ListBox1->Items->Count;i++)
        {
                if(ListBox1->Selected[i])
                {
                        usr_selected = true;
                        Image7->Picture->LoadFromFile("images\\buttons\\us_edit_user.jpg"); //вот здесь и вылетает
                        Image8->Picture->LoadFromFile("images\\buttons\\us_delete_user.jpg");
                        GlobalF_usr = usr_name1[i];
                        GlobalI_usr = usr_name2[i];
                        GlobalO_usr = usr_name3[i];
                        GlobalPSW_usr = usr_pssw[i];
                }
        }
}


Код
void __fastcall TForm7::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}


Еще на этой форме есть кнопки "доступ"(просмотр log-файлов) и "протоколы". Эти кнопки просто перекидывают на новые почти пустые окна окна, на которых пока(еще не написал) ничего кроме загрузки картинок не происходит.

Так вот ошибка вылетает когда я из любого окна "доступ" и "протоколы" перехожу на окно "пользователи" и выбираю в ListBox-е пользователя. Причем ошибка ОТКРЫТИЯ КАРТИНКИ вылетает, если во всех этих трех формах Action = caFree НЕТУ (в остальных во всех есть), а АКСЕСС ВИАЛЕЙШН когда в форме "пользователи" в FormClose Action = caFree ЕСТЬ, причем вылетает уже еще только на загрузке формы "пользователи". Если же Action = caFree будет в одной из форм "доступ" или "протоколы", то получаю Abstract Error!!!
European
1. Зачем одинаковые действия на FormCreate и FormActivate?
2. Уверен, что к моменту вызова TForm7::ListBox1Click относительный путь не был изменен? Может лучше использовать абсолютный?
ARTHES
переписал форму заново, не помогло. Код новой формы:

Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit72.h"

#include "Unit73.h"
#include "Unit74.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm72 *Form72;
//---------------------------------------------------------------------------
__fastcall TForm72::TForm72(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm72::FormCreate(TObject *Sender)
{
//
}
//---------------------------------------------------------------------------
void __fastcall TForm72::FormActivate(TObject *Sender)
{
        Image4->Picture->LoadFromFile("images\\buttons\\us_edit_user_unactive.jpg"); //вот здесь вылетает ошибка
        Image5->Picture->LoadFromFile("images\\buttons\\us_delete_user_unactive.jpg");
}
//---------------------------------------------------------------------------
void __fastcall TForm72::ListBox1Click(TObject *Sender)
{
        Image4->Picture->LoadFromFile("images\\buttons\\us_edit_user.jpg");
        Image5->Picture->LoadFromFile("images\\buttons\\us_delete_user.jpg");
}
//---------------------------------------------------------------------------
void __fastcall TForm72::Image8Click(TObject *Sender)
{
Form72->Close();
Form73->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm72::Image9Click(TObject *Sender)
{
Form72->Close();
Form74->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm72::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
//---------------------------------------------------------------------------

Вылетает Access Violation, если убрать Action = caFree, то вылетает ошибка открытия картинки


И еще: что это значит:
Цитата
если контролы были созданы в Design Time
European
Это значит, что ты помещал компоненты на форму в процессе разработке формы, а не создавал их динамически. Судя по твоему коду, ты их и создаешь в Design Time. Кстати, на счет монопольного доступа к файлу со стороны TImage - это я ступил. Так что с путями?
ARTHES
Цитата
1. Зачем одинаковые действия на FormCreate и FormActivate?


чтобы не перегружать заново базу пользователей при каждой активации формы, а перегружать только в случае ее изменения (GlobalWAS_modified == true)


МЫСЛЬ: я заметил, что Access Violation вылетает при каждой повторной попытке Form72->Show() из ЛЮБОЙ формы после того, как было сделано Form72->Close() при Action = caFree в TForm72::FormClose

- может нужно потом уже не Show(), а что-то типа Open()???или Create()???
- может я что-то не подключил?
European
Цитата(ARTHES @ 12:02:2007, 15:54 )
я заметил, что Access Violation вылетает при каждой повторной попытке Form72->Show() из ЛЮБОЙ формы после того, как было сделано Form72->Close() при Action = caFree в TForm72::FormClose
*

Ну так и должно быть, т.к. Action = caFree заставляет форму разрушаться. Теперь надо ее не просто показать, а еще предварительно создать
ARTHES
Цитата
... Так что с путями?


вот насчет этого ты как раз и БЫЛ ПРАВ !!!

Что-то меняет путь. Как только прописал путь абсолютный, ВСЕ ЗАРАБОТАЛО !!!!! biggrin.gif

я закомментил все Action = caFree, перестал вылетать Access Violation, прописал абсолютные пути - и все заработало. Кстати относительный путь мог поменяться при открытии базы пользователей или добавлении списка log-файлов в ListBox на форме "доступ" - и база пользователей, и log-файлы лежат у меня в других директориях !!! Это ВСЕ ОБЬЯСНЯЕТ!!! аж сам довольный, что нашли в чем дело biggrin.gif !!

С П А С И Б О О Г Р О М Н О Е



Цитата
Теперь надо ее не просто показать, а еще предварительно создать


а как ее предварительно создать?
European
Цитата(ARTHES @ 12:02:2007, 16:18 )
а как ее предварительно создать?
*

Что-то типа:
Код
TForm* pForm= new TForm( this);
pForm->ShowModal();


Если приоритетом является экономия памяти, то формы лучше разрушать (Action = caFree).
ARTHES
ВСЕ ПОНЯЛ!

ну вообще у меня здесь экономия памяти приоритетом не является (ну это пока smile.gif ), но все равно спасибо. В будущем, я думаю пригодится!!!
Barmutik
Что-то мне кажется что проблема с путями .. а Вы не пробовали абсолютные пути указать а не относительные ?

А что будет если Вашу программу по линку запустят ? И текущая папка будет абы куда указывать?
ARTHES
ПРОБЛЕМА УЖЕ РЕШЕНА

все дело было в путях: нужно абсолютные пути указывать, а не относительные.

ВСЕМ СПАСИБО !!!
European
Цитата(ARTHES @ 12:02:2007, 17:10 )
ПРОБЛЕМА УЖЕ РЕШЕНА
*

Это до тех пока, пока софтину в другую папку не установят smile.gif. Ну ничего, постоянное изобретение велосипедов - характерная черта большинства программистов
ARTHES
не, там задача другая: изготавливается целый аппарат с сенсорным экраном, управляемый программоой, которую я собственно и пишу. Те, кто будут использовать аппарат ничего переустанавливать не будут, да и доступа то у них не будет, а вообще они и знать не будут, где там че установлено. Можно конечно записать в файл текущую директорию и считывать при каждой загрузке программы, но честно говоря нету времени всем этим заниматься - сроки и поджимают.
Короче всем спасибо за помощь.
SlaN
У меня возникла такая же проблема. Даже польностью указанные пути не помогают. Значит программа открывает либо картинки, либо сэмплы музыки, и сразу же появляется превью. Если это рисунок - соотвественно его содержимое, если звук - рисунок с надписью Wav.
Цитата
Image1->Picture->Bitmap->CleanupInstance();
if (strstr(filename1.c_str(),".wav")!=NULL)
{
Image1->Picture->Bitmap->LoadFromFile("D:\Temp\Calcipher\WAV.bmp"); //Вот здесь вылетает ошибка EFReadError
// Image1->Picture->Bitmap->LoadFromFile("WAV.bmp"); Так тоже не помогает
PlaySound(filename1.c_str(), 0, SND_FILENAME);
} else Image1->Picture->Bitmap->LoadFromFile(filename1);

В чём же проблема?
European
Цитата(SlaN @ 12:03:2008 - 00:11) *
Код
Image1->Picture->Bitmap->LoadFromFile("D:\Temp\Calcipher\WAV.bmp"); //Вот здесь вылетает ошибка EFReadError

1. Так а что за файл все-таки, wav или bmp?
2. Файл точно существует?
3. Я не уверен, что стоит вызывать CleanupInstance у Bitmap. Нет у меня хелпа под рукой чтобы разобраться. Возможно стоит прибегнуть к более гуманным способам очистки
MaTBeu
Здрасте. Позвольте вклиниться в ваше обсуждение. Я вот смотрю, и думаю: "А зачем каждый раз загружать картинки из файлов?". Не проще ли будет воспользоваться компонентой ImageList, к ней и обращаться удобнее, и проблем с путями не будет. Не знаю, может я чего недопонимаю, но мне кажется, так будет рациональнее.
Yason
SlaN, в си бэк-слеши в путях нужно удваивать:
Код
Image1->Picture->Bitmap->LoadFromFile("D:\\Temp\\Calcipher\\WAV.bmp")
krukru
объясните колхознику проблему наподобие:
у меня тоже главная форма содержит целое месиво картинок, штук наверна,300-400, тока не подгружаемых, а в имаджах в в БМП слоями.
пишу-рисую :-) в БС++Б 2006. Не могу открыть вторую форму (Form2->Show()wink.gif. выскакивает аксесс виолейшен итд. на другой машине тоже. Пустой новый проект открывает вторую форму без проблем.
Предыдущее подобное приложение писал в БС++Б 6. проблемм не было.
прошу прощения, что суюсь сюда, раз проблему уже нашли, и она в другом у Вас была, но просто похоже немнога ситуёвина.

European
Показывайте код, который вызывает ошибку. Вообще говоря, отладчик в руки и вперед
krukru
удалил все подключенные фреймы,
снёс с формы вообще всё,
удалил все функции и переменные,
сравнил все свойства формы с вновь создаваемой в чистом проекте,
сравнил файл ресурсов проекта с вновь создаваемым...
вобщем привел к девственной чистоте.
один хрен не вылазит вторая форма по клику.
krukru
пока не разобрался пришлось создать новый проект и из новой главной формы открывать бывшую главную.
В этом случае из последней окна нормально вызываются.
если после сохранения изменений снова перейти в старый проект, ситуёвина повторяется.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.