Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.05.2012, 23:41
fatima fatima вне форума
Прохожий
 
Регистрация: 10.05.2012
Сообщения: 5
Репутация: 10
По умолчанию Новая вкладка

Подскажите, пожалуйста!!!
Написала многостраничный графический редактор. Но в нем проблема такова: при создании изображения в новой вкладке и при открытии картинки в новой вкладке эта картинка создается/открывается во всех вкладках. Знаю, что проблема в том, что 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  
Старый 10.05.2012, 23:53
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Что мешает завести массив, где будут храниться page и image?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 11.05.2012, 23:12
fatima fatima вне форума
Прохожий
 
Регистрация: 10.05.2012
Сообщения: 5
Репутация: 10
По умолчанию

Мешает то, что я не знаю, как это сделать.
Напишите, пожалуйста!
Только на языке Delphi, а не на псевдокоде... Иначе я так и не пойму..
Ответить с цитированием
  #4  
Старый 11.05.2012, 23:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да в общем правильно ты сделал.
Только теперь для выполнения любой операции тебе надо обращаться к имеджу на активной вкладке.

Я бы добавил сохранение ссылки на имадж в свойстве 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  
Старый 11.05.2012, 23:36
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Как то так:
Код:
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  
Старый 12.05.2012, 00:17
fatima fatima вне форума
Прохожий
 
Регистрация: 10.05.2012
Сообщения: 5
Репутация: 10
По умолчанию

Так или не так? (это уже для открытия имеющегося изображения в новой вкладке)
Что-то у меня не так, потому что выдает ошибку и останавливает процесс.
Код:
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  
Старый 12.05.2012, 00:40
fatima fatima вне форума
Прохожий
 
Регистрация: 10.05.2012
Сообщения: 5
Репутация: 10
По умолчанию

В общем, вот моё приложение...
Вложения
Тип файла: rar Multipage grapfical editor.rar (648.1 Кбайт, 5 просмотров)
Ответить с цитированием
  #8  
Старый 12.05.2012, 21:41
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Немного поковырял:

mge.rar 112Кб.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
fatima (13.05.2012)
  #9  
Старый 13.05.2012, 14:30
fatima fatima вне форума
Прохожий
 
Регистрация: 10.05.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Немного поковырял:

mge.rar 112Кб.

Спасибо-спасибо-спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:09.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025