![]() |
|
|
Регистрация | << Правила форума >> | 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)
|
#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
|