Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.065 c
15-1353409433
alexdn
2012-11-20 15:03
2013.03.22
Ит проект


2-1340219005
Dron83
2012-06-20 23:03
2013.03.22
IdUDPClient1.SendBuffer(t.memory^,t.size);


15-1336941003
Юрий
2012-05-14 00:30
2013.03.22
С днем рождения ! 14 мая 2012 понедельник


15-1341139478
Дмитрий С
2012-07-01 14:44
2013.03.22
999 рублей это для программистов :)


15-1335356229
AV
2012-04-25 16:17
2013.03.22
Кодировка русских путей при запуске bat, сделанного в NotePad





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский