![]()  | 
	
 
  | 
| 
		 
			 
			#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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 В общем, вот моё приложение... 
		
	
		
		
			 | 
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
 
fatima (13.05.2012)
  | ||