Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2009, 13:34   #1
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию Сохранение динамически созданных объектов

Всем доброго времени суток!

Передо мной стоит такая задача: на форме есть картинки, необходимо сделать возможность выбора количества этих картинок, т.е. картинки можно добавлять и удалять. И ещё их можно двигать, но вот в чем проблема, картинки я создаю вот так:

Код:
procedure TfrmMain.imgNewClick(Sender: TObject);
begin
  MyImage:=TImage.Create(Owner);
  MyImage.Parent:=self;
  MyImage.Height:=64;
  MyImage.Width:=64;
  MyImage.Left:=100;
  MyImage.Top:=100;
  MyImage.Stretch:=true;
  MyImage.Visible:=true;
  MyImage.DragKind:=dkDock;
  MyImage.DragMode:=dmAutomatic;
  if OpenPictureDialog.Execute  then MyImage.Picture.LoadFromFile(OpenPictureDialog.FileName);
end;
И мне нужно чтобы при следующем запуске эта картинка уже была на форме и не пустой, а содержать ранее выбранную через
Код:
  if OpenPictureDialog.Execute  then MyImage.Picture.LoadFromFile(OpenPictureDialog.FileName);
картинку.

И еще удаляю картинки так:
Код:
MyImage.Destroy;
Первы раз картинка удаляется, на второй раз ошибка
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 05.12.2009, 14:22   #2
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

а вы используйте запись для сохранения

Код:
type
  im_data = packed record
    Height : Integer;
    Width : Integer;
    Left : Integer;
    Top : Integer;
    FileName : String[255];
  end;

.....

var
 imgdat: File of im_data;
Код:
image1.Free;
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!
DarkEvil вне форума Ответить с цитированием
Старый 05.12.2009, 14:31   #3
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

DarkEvil, сделал на удаление Free, теперь когда удаляю вторую картинку удаляется первая, когда удаляю оставшуюся - ошибка.

Как объявить запись запись я понял, а как теперь в неё сохранить картинку?
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 05.12.2009, 14:58   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Marsel737 Посмотреть сообщение
Первый раз картинка удаляется, на второй раз ошибка
Естественно. Вы сами-то в курсе, какая из созданных картинок удаляется?
Вот и программа тоже...
Вы при создании давайте им какой-то отличительный признак - хоть название, хоть тэг...
И удалять тогда будете конкретный экземпляр - или по названию, или по тэгу.
mihali4 вне форума Ответить с цитированием
Старый 05.12.2009, 15:17   #5
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

mihali4, вы наверно ещё помните что я совсем недавно создавал тему по поводу создания динамических объектов, и я вообщем ещё в этом вопросе не до конца разобрался, поэтому спрашиваю, как мне их именовать чтоб названия у всех разные были?
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 05.12.2009, 15:53   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Заводим глобальную переменную (сохраняем ее при выходе в ини-файле).
Соответственно, при запуске читаем ее.
И добавляем строку при создании:
Код:
MyImage.Name:='MyImage'+IntToStr(MyGlobVar);
Далее это же имя используем при уничтожении экземпляра...
Например, так:
Код:
var myimage: TComponent;
begin
myimage:=FindComponent('Image1');
myimage.Destroy;
end;

Последний раз редактировалось mihali4; 05.12.2009 в 15:59.
mihali4 вне форума Ответить с цитированием
Старый 05.12.2009, 16:02   #7
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

mihali4, спасибо теперь всё ясно
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 05.12.2009, 17:51   #8
DarkEvil
Форумчанин
 
Аватар для DarkEvil
 
Регистрация: 08.05.2009
Сообщений: 247
По умолчанию

Вам обязательно сохранить картинку? Если она лежать будет постоянно в одном месте, то есть никто не удалит, просто сохраните путь к ней, если же нужна именно картинка, то тут советую использовать БД
Мой сайт
Цитата:
Сообщение от Scream In Darkness
Кровь не даёт покоя! Кровь не знает сна!
Кровь бежит на волю – Вены рвёт сама!

Последний раз редактировалось mihali4; 05.12.2009 в 18:17.
DarkEvil вне форума Ответить с цитированием
Старый 06.12.2009, 21:36   #9
Marsel737
Форумчанин
 
Аватар для Marsel737
 
Регистрация: 09.11.2009
Сообщений: 669
По умолчанию

mihali4, оказывается всё не так ясно, как казалось на первый взгляд. Предложенный вами код для удаления, как я понял, удаляет по названию, тогда как мне узнать название, если удалене реализовано при помощи PopupMenu?

Код:
var myimage: TComponent;
begin
myimage:=FindComponent('Image1');
myimage.Destroy;
end;
Я не всегда знаю, о чем говорю, но знаю, что прав. © Мухаммед Али.
К чёрту обстоятельства. Я создаю возможности. © Брюс Ли
Marsel737 вне форума Ответить с цитированием
Старый 06.12.2009, 22:12   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Это однозначно определяется при помощи свойства PopupComponent property (TPopupMenu)
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка событий динамически созданных объектов в С++ Builder Shafty Помощь студентам 1 26.02.2009 16:11
Чтение адресов созданных BCC? ITM Безопасность, Шифрование 1 06.02.2009 05:22
Чтение адресов созданных BCC? ITM Свободное общение 1 06.02.2009 04:51
Метка в динамически созданных пунктах MainMenu Alter Компоненты Delphi 4 30.06.2008 22:51