Главная страница
    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.068 c
15-1332189002
Юрий
2012-03-20 00:30
2013.03.22
С днем рождения ! 20 марта 2012 вторник


15-1351679340
AV
2012-10-31 14:29
2013.03.22
Com(_to_(USB)). Безобразие..


15-1331641742
Kerk
2012-03-13 16:29
2013.03.22
Про профессию


2-1340868561
начинающий41
2012-06-28 11:29
2013.03.22
формат даты


2-1328363804
whoim
2012-02-04 17:56
2013.03.22
динамический двумерный массив of integer: не могу найти ошибку..





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский