Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

TImageList, ссылка с другой формы   Найти похожие ветки 

 
ES   (2012-10-18 19:32) [0]

Delphi 7, на одной форме лежит TImageList, а другая форма хочет использовать этот TImageList в качестве картинок для своих контролов (ну например toolbar).

В design-time все хорошо, указываем зависимости, тулбар спокойно использует картинки с ImageList расположенного на другой форме.

Но в run-time насколько я понял картинки отображаются только тогда, когда создан хотя бы один экземпляр той формы, на которой лежим imagelist.

Вопросы:

1) можно ли обойтись без создания формы, на которой лежит ImageList?

2) если первое невозможно, то можно как-то понять, что на ImageList есть ссылки? И если ссылки есть, то создавать тогда экземпляр формы, если ссылок нету - не создавать?

Самый крутой вариант - создавать тогда, когда ссылки появились. Уничтожать - когда ссылки все сняты (как вариант - уничтожена та форма, которая ссылалась).


 
Плохиш ©   (2012-10-18 19:49) [1]


> 1) можно ли обойтись без создания формы, на которой лежит
> ImageList?

нет

> 2) если первое невозможно, то можно как-то понять, что на
> ImageList есть ссылки? И если ссылки есть, то создавать
> тогда экземпляр формы, если ссылок нету - не создавать?

программист нужен.


 
ES   (2012-10-18 19:54) [2]


>
> программист нужен.

не понял


 
Dennis I. Komarov ©   (2012-10-18 20:00) [3]

TForm1 есть потомок TForm со своими тараканами в interface...


 
Ega23 ©   (2012-10-18 20:10) [4]

Для таких случаев существует DataModule. Пихай туда свой ImageList, создавай его (DataModule) первым в проекте и ссылайся на этот ImageList из любого экземпляра любой формы.


 
ES   (2012-10-18 22:43) [5]

парни, как насчет вопроса номер 2) ?


 
Игорь Шевченко ©   (2012-10-18 22:50) [6]


> 2) если первое невозможно, то можно как-то понять, что на
> ImageList есть ссылки? И если ссылки есть, то создавать
> тогда экземпляр формы, если ссылок нету - не создавать?
>
> Самый крутой вариант - создавать тогда, когда ссылки появились.
>  Уничтожать - когда ссылки все сняты (как вариант - уничтожена
> та форма, которая ссылалась).


А зачем ?

То есть, сделать конечно можно, описав интерфейс, реализуя его, переписав у формы-наследника _AddRef и _Release, заставив их работать отлично от реализации в TComponent, но зачем ?

DataModule для подобных вещей предназначен и гораздо проще.


 
ES   (2012-10-18 22:58) [7]


> А зачем ?

ну... попытаюсь объяснить...

Дело в том, что постепенно вырисовывается модуль аля uVisualStandart, в который включаются всякие штуки, позволяющие унифицировать интерфейс, в том числе разных приложений. То есть, в результате это модуль общего назначения, подцепляемый к разным проектам.

Поэтому сам модуль в общем-то плохо представляет - а использует ли его вообще кто-то. Пока всё удавалось сделать на динамке, то есть используются фишки модуля - там живут нужные экземпляры классов, перестают использоваться - все уничтожается. В принципе, конечно, при современных ресурсах можно понасоздавать все хотя бы в одном экземпляре и не париться.

Может, так и поступлю...


 
Игорь Шевченко ©   (2012-10-18 23:14) [8]


> В принципе, конечно, при современных ресурсах можно понасоздавать
> все хотя бы в одном экземпляре и не париться.


Наиболее разумно


 
Юрий Зотов ©   (2012-10-19 00:07) [9]

> ES

Может быть, нужен синглтон, автоматически создаваемый по требованию?

unit Unit2;

interface

uses
 SysUtils, Classes, Forms;

type
 TMyDataModule = class(TDataModule)
 public
   class function NewInstance: TObject; override;
   procedure FreeInstance; override;
 end;

function GetMyDataModule: TMyDataModule;

implementation

{$R *.dfm}

var
 _MyDataModule: TMyDataModule = nil;

function GetMyDataModule: TMyDataModule;
begin
 if _MyDataModule = nil then
   _MyDataModule := TMyDataModule.Create(Application);
 Result := _MyDataModule
end;

{ TMyDataModule }

procedure TMyDataModule.FreeInstance;
begin
 inherited;
 _MyDataModule := nil;
end;

class function TMyDataModule.NewInstance: TObject;
begin
 if _MyDataModule = nil then
   _MyDataModule := TMyDataModule(inherited NewInstance);
 Result := _MyDataModule
end;

end.


 
ES   (2012-10-19 00:36) [10]


> нужен синглтон, автоматически создаваемый по требованию

забавное сочетание слов "автоматически создаваемый" и "по требованию" ))

Да в принципе да, что-то типа такого. Просто я хотел это делать только если есть реальные ссылки на компонент ImageList"а, но поскольку определить это я не понимаю как, то можно просто на инициализации модуля создавать экземпляр формы.

Насчет по требованию - не слишком удобно. Конечному потребителю помимо прописывания ссылки на ImageList еще нужно знать, что нужно обязательно дернуть некий метод. Потому что выглядит это так - в design-time все хорошо, запускаем run-time - а там иконок тупо нету, хотя нигде ни на что не ругается. По крайней мере я говорю про настройку cxBarManager (или как-то так, в общем тулбар от девок). Я часа полтора убил, чтобы понять почему это в design-time отлично вижу кнопки с картинками, а при запуске программы остаются только надписи.


 
MsGuns ©   (2012-10-22 10:15) [11]

>забавное сочетание слов "автоматически создаваемый" и "по требованию" ))

Ничего забавного. По крайней мере в контексте того, что Вы пытаетесь соорудить. ЮЗ показал просто как можно реализовать модель с единственным экземпляром объекта "общего назначения", который создается (автоматически) лишь при первом обращении из любого вызывающего модуля либо не создается вообще если таких вызовов не было.

В целом согласен с некоторой странностью постановки задачи. По тому, что вы тут написали, Вам нужна либо длл, либо ком-сервер, которые будут "обслуживать" интерфейсы по мере обращения к ним.


 
ES   (2012-10-22 13:00) [12]

Отличное решение - вынести картинки ака TImageList в ком-сервер )))


 
MsGuns ©   (2012-10-22 13:20) [13]

Стесняюсь спросить, а какой смысл вообще в выносе одних картинок в некий отдельный "модуль" ?


 
Ega23 ©   (2012-10-22 13:28) [14]


> Отличное решение - вынести картинки ака TImageList в ком-
> сервер )))


Между прочим, не вижу ничего смешного. :)


 
Медвежонок Пятачок ©   (2012-10-22 13:51) [15]

не, лучше в облако. ага.


 
ES   (2012-10-22 16:55) [16]


> Стесняюсь спросить, а какой смысл вообще

мой пост в этой ветке под номером [7]


 
брат Птибурдукова   (2012-10-22 16:57) [17]

Не страдал бы дуркой, а воспользовался [4]+[9].



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.115 c
1-1296984241
Wadimka
2011-02-06 12:24
2013.03.22
Как использовать сжатие GZIP в запросе SOAP для компонентTHTTPRIO


15-1345037851
Artem
2012-08-15 17:37
2013.03.22
Посоветуйте фоторесайзер любых размеров.


2-1345804953
Wadimka
2012-08-24 14:42
2013.03.22
Подскажите можно ли с консольным приложением..


15-1340089952
Омлет
2012-06-19 11:12
2013.03.22
Почему FreeAndNil такой, какой он есть?


2-1334754032
andrewtitoff
2012-04-18 17:00
2013.03.22
Картинки в массив и обратно