![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Здравствуйте) Вот делаю проект. Образовалась одна не очень хорошая вещь. Я динамически создаю компоненты TImage и помещаю их на форму. Также присваиваю им события уже существующего на форме компонента. Таким образом, я могу передвигать TImage по форме. Но вот создается проблема((((. После выключения программы созданные мной компоненты, естественно, утекают и форма опустошается и при следующем запуске программы динамически созданных Image'й на форме нет.
Мне нужно чтоб при последующих запусках программы динамически созданные в процессе работы приложения компоненты оставались на этой форме и я мог бы пользоваться ими. Мне нужно чтоб это происходило только с Image. И естественно все события для этих форм должны остаться в рабочем и операбельном состоянии. |
|
#2
|
||||
|
||||
|
Для это существует TIniFile. Создаётся ini-файл, куда при закрытии программы нужно записать всё, что потребуется для восстановления Image при следующем запуске.
|
| Этот пользователь сказал Спасибо 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.
|
| Этот пользователь сказал Спасибо 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. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
R.M.V.D (10.03.2013)
| ||