![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)
| ||
|
#7
|
||||
|
||||
|
Спасибо огромное) Буду разбираться
![]() |
|
#8
|
||||
|
||||
|
Честно говоря, я не разобрался) Не судите строго, но чет не работает.
Опишу еще раз, может чем еще поможете) Я создаю программу на подобии имитации и эмуляции рабочего стола windows, но с нуля и на свой манер. У меня есть другая форма на которой находится клавиша, при нажатии на которую на другой(Основной) форме создается TImage с характеристиками уже существующего компонента TImage, а именно со всем необходимым для осуществления передвижения динамически созданных компонентов по форме. И в итоге я могу создать сколь угодно многое кол-во компонентов TImage и могу, естественно, перемещать их по форме. После этого я размещаю все компоненты в нужном мне порядке и выключаю программу. Каждый новый Timage должен быть назначен как ярлык на программу, находящуюся в памяти компьютера, каждый на свою программу. Но вот это у меня не получилось. После повторного включения программы все созданные ранее компоненты полностью исчезают с формы. Мне нужно их вернуть и , чтоб при каждом включении я мог бы создавать все новые ярлыки(TImage) и привязывать к ним программы. Плюс ко всему этому они должны уметь перемещаться по форме. Вообщем при каждом последующем включении на форму должны прогружаться ранее созданные Imag'и со всеми событиями и привязками. У каждого должна быть своя привязка для открытия программы. Может у кого уже есть подобные заготовки или сторонние исходники. Буду премного благодарен за помощь. Я так понял, что для каждого отдельного ярлыка должен существовать свой ini файл со всеми характеристиками для данного Image'a? |
|
#9
|
||||
|
||||
|
Почитай про TReader/TWriter
Код HTML:
|
| Этот пользователь сказал Спасибо BBBCat за это полезное сообщение: | ||
R.M.V.D (12.03.2013)
| ||
|
#10
|
||||
|
||||
|
Спасибо!!!
|
|
#11
|
||||
|
||||
|
Цитата:
![]() |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
R.M.V.D (13.03.2013)
| ||
|
#12
|
||||
|
||||
|
Уаааааааууууу!!!
Это то, что надо!!!!!!! Просто супер!) Спасибо огромное!!! |
|
#13
|
||||
|
||||
|
А как сделать, чтоб для каждого Imaga создавалось свое событие OnDblClick?
|
|
#14
|
||||
|
||||
|
http://zalil.ru/34343181
писал кому-то, пародия на "Пуск") можно из проводника программ наперетаскивать и запускать оттуда, переименовывать название, удалять. ярлыки запоминает в профиле пользователя. |
|
#15
|
||||
|
||||
|
Так как все же сделать для каждого, динамически создаваемого Image'a, свой обработчик событий OnDblClick, например.Например вводишь в Edit путь к файлу и нажимаешь создать Image. Он создается и запоминает путь до файла из Edit и потом может его загрузить. После чего в Edit вводится новый путь до файла и уже следующий Image запоминает уже этот адрес. Надо сделать это на основе выше представленного исходника от Alegun
|