![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Здравствуйте) Вот делаю проект. Образовалась одна не очень хорошая вещь. Я динамически создаю компоненты TImage и помещаю их на форму. Также присваиваю им события уже существующего на форме компонента. Таким образом, я могу передвигать TImage по форме. Но вот создается проблема((((. После выключения программы созданные мной компоненты, естественно, утекают и форма опустошается и при следующем запуске программы динамически созданных Image'й на форме нет.
Мне нужно чтоб при последующих запусках программы динамически созданные в процессе работы приложения компоненты оставались на этой форме и я мог бы пользоваться ими. Мне нужно чтоб это происходило только с Image. И естественно все события для этих форм должны остаться в рабочем и операбельном состоянии. |
#2
|
||||
|
||||
![]() Для это существует TIniFile. Создаётся ini-файл, куда при закрытии программы нужно записать всё, что потребуется для восстановления Image при следующем запуске.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
R.M.V.D (10.03.2013)
|
#3
|
||||
|
||||
![]() Да, это то ясно)
Но вот что надо записать в ini файл, чтоб он загрузил не одну, а сразу все созданные ранее динамически Image. И чтоб все события для них сохранились. Плюс ко всему каждая картинка является по-сути ссылкой на какое либо приложения на компе. Я не очень понимаю саму структуру подобного ini файла. |
#4
|
||||
|
||||
![]() Сохраняй всё, что может понадобиться: Name, Picture (путь к файлу), Left, Top, Width, Height, Parent, OnMouseDown, OnMouseUp, OnMouseMove, OnClick и т.д. Все требуемые события должны быть заранее прописаны, останется их только назначить созданному TImage.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
R.M.V.D (10.03.2013)
|
#5
|
||||
|
||||
![]() Хорошо. А как потом заставить delphi открыть все такие ini файлы, если они находятся в одной папке, чтоб при включении программы сразу же загружались все TImage на форму?
|
#6
|
||||
|
||||
![]() Упрощённый вариант
Код:
unit Unit63; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, IniFiles; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure ImageClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } MyImage : TImage; ImagePath : String; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var Ini : TIniFile; begin if FileExists(ChangeFileExt(Application.ExeName, '.ini')) then begin Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); Button1Click(NIL); with MyImage, Ini do begin Name := ReadString('Image', 'Name', 'MyImage'); Left := ReadInteger('Image', 'Left', 20); Top := ReadInteger('Image', 'Top', 20); Width := ReadInteger('Image', 'Width', 100); Height := ReadInteger('Image', 'Height', 100); ImagePath := ReadString('Image', 'Picture', ''); if ImagePath <> '' then MyImage.Picture.Graphic.LoadFromFile(ImagePath); end; Ini.Free; end; end; procedure TForm1.FormDestroy(Sender: TObject); var Ini : TIniFile; Image : TImage; begin Image := TImage(FindComponent('MyImage')); if Assigned(Image) then begin Ini := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')); with MyImage, Ini do begin WriteString('Image', 'Name', 'MyImage'); WriteInteger('Image', 'Left', Left); WriteInteger('Image', 'Top', Top); WriteInteger('Image', 'Width', Width); WriteInteger('Image', 'Height', Height); WriteString('Image', 'Picture', ImagePath); end; Ini.Free; end end; procedure TForm1.ImageClick(Sender: TObject); begin ShowMessage('My image clicked.'); end; procedure TForm1.Button1Click(Sender: TObject); var Image : TImage; begin Image := TImage(FindComponent('Image1')); if Assigned(Image) then Exit; MyImage := TImage.Create(Self); with MyImage do begin Parent := Form1; Name := 'MyImage'; Left := 20; Top := 20; Width := 100; Height := 100; AutoSize := True; OnClick := ImageClick; end; ImagePath := 'image.bmp'; MyImage.Picture.LoadFromFile(ImagePath); end; end. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
R.M.V.D (10.03.2013)
|