![]() |
|
#1
|
|||
|
|||
![]() Подскажите, пожалуйста!!!
Написала многостраничный графический редактор. Но в нем проблема такова: при создании изображения в новой вкладке и при открытии картинки в новой вкладке эта картинка создается/открывается во всех вкладках. Знаю, что проблема в том, что Image один. Помогите исправить этот недочет... Вот код: Код:
procedure создать_в_новой_вкладке; var page: TTabSheet; f: TImage; begin try page := TTabSheet.Create(pagecontrol1); page.PageControl := pagecontrol1; page.Caption := format('Без имени - '+'%d', [pagecontrol1.PageCount]); pagecontrol1.ActivePage := page; f := TImage.Create(page); f.parent:=Page; except on e: exception do ShowMessage(e.Message); end; end; Последний раз редактировалось lmikle, 11.05.2012 в 06:16. |
#2
|
||||
|
||||
![]() Что мешает завести массив, где будут храниться page и image?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
![]() Мешает то, что я не знаю, как это сделать.
Напишите, пожалуйста! Только на языке Delphi, а не на псевдокоде... Иначе я так и не пойму.. ![]() |
#4
|
|||
|
|||
![]() Да в общем правильно ты сделал.
Только теперь для выполнения любой операции тебе надо обращаться к имеджу на активной вкладке. Я бы добавил сохранение ссылки на имадж в свойстве Tag вкладки (только для 32 битного компилятора, для 64 битного придется извращаться). Тогда все упрощается. Вот твой подправленный код для создания вкладки и соотв. функция получения ссылки на имадж: Код:
procedure создать_в_новой_вкладке; var page: TTabSheet; f: TImage; begin try page := TTabSheet.Create(pagecontrol1); page.PageControl := pagecontrol1; page.Caption := format('Без имени - '+'%d', [pagecontrol1.PageCount]); pagecontrol1.ActivePage := page; f := TImage.Create(page); f.parent:=Page; page.tag := Integer(f); except on e: exception do ShowMessage(e.Message); end; end; function TForm1.GetActiveImage : TImage; begin Result := Nil; If PageControl1.ActivePage <> Nil Then Result := TImage(PageControl1.ActivePage.Tag); end; Теперь все операции надо делать со ссылкой, полученной через эту функцию. Например, загрузка файла будет выглядеть теперь так: Код:
GetActiveImage.Picture.LoadFromFile(AFileName); |
#5
|
||||
|
||||
![]() Как то так:
Код:
type TTabImage = record page : TTabSheet; image : TImage; end; var TabImage : array of TTabImage; procedure создать_в_новой_вкладке; begin SetLength(TabImage, Length(TabImage) + 1); TabImage[Length(TabImage - 1)].page := TTabSheet.Create(pagecontrol1); TabImage[Length(TabImage - 1)].page.PageControl := pagecontrol1; TabImage[Length(TabImage - 1)].page.Caption := format('Без имени - '+'%d', [pagecontrol1.PageCount]); pagecontrol1.ActivePage := TabImage[Length(TabImage - 1)].page; TabImage[Length(TabImage - 1)].Image := TImage.Create(TabImage[Length(TabImage - 1)].page); TabImage[Length(TabImage - 1)].Image.parent := TabImage[Length(TabImage - 1)].page; end; Лучше, конечно, для этого использовать TList. Опоздал чуток. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
![]() Так или не так? (это уже для открытия имеющегося изображения в новой вкладке)
Что-то у меня не так, потому что выдает ошибку и останавливает процесс. Код:
procedure открыть_в_новой_вкладке; var page: TTabSheet; f: TImage; begin if OpenPictureDialog1.Execute then begin CurrentFile := OpenPictureDialog1.FileName; SaveStyles; GetActiveImage.Picture.LoadFromFile(CurrentFile); //Image1.Picture.LoadFromFile(CurrentFile); RestoreStyles; /////////////////// открытие в новой вкладке page := TTabSheet.Create(pagecontrol1); page.PageControl := pagecontrol1; page.Caption := format('Без имени - '+'%d', [pagecontrol1.PageCount]); pagecontrol1.ActivePage := page; f := TImage.Create(page); f.parent:=Page; page.tag := Integer(f); end; end; Последний раз редактировалось Admin, 12.05.2012 в 10:24. |
#7
|
|||
|
|||
![]() В общем, вот моё приложение...
|
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
fatima (13.05.2012)
|