![]() |
|
|
|
|
#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?
|
|
#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. Опоздал чуток. |
|
#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
|
|||
|
|||
|
В общем, вот моё приложение...
|