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

Вниз

TcxComboBox, уведомление о Delete?   Найти похожие ветки 

 
Es   (2012-07-30 14:59) [0]

Товарищи знатоки devExpress...

Мне нужно хранить список элементов в devExpress, компоненте TcxComboBox и привязать TObject для доп. информации об объекте в списке. Как бы сделать автоматическую сборку мусора, то есть чтобы при удалении строчки в комбо, он уведомлял или автоматически Free"ил привязанный TObject?


 
Ega23 ©   (2012-07-30 15:09) [1]

Никак, Items там TStrings. Либо переопределяй компонент, либо хелпер напиши


 
Es   (2012-07-30 15:24) [2]

эх, нету в моей дельфи хелперов )


 
Es   (2012-07-30 15:24) [3]

вообще я докопался до Properties.DataChanged или как-то так. Он стабильно вызывается при Delete. Но вот как в нём определить что реально происходит - я не понял пока ))


 
Es   (2012-07-30 15:33) [4]

Нет... PropertiesChanged оно называлось... ну как-то так, сейчас уже не помню.


 
Es   (2012-07-30 15:36) [5]


>  Items там TStrings

вообще не ожидал от тебя такого некорректного ответа. Если ты имеешь в виду как оно объявлено - то оно, конечно, да.
Но реально TStrings там быть не может, естественно, как ты понимаешь )


 
Ega23 ©   (2012-07-30 15:37) [6]


> эх, нету в моей дельфи хелперов )


ну тогда так


unit Unit50;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
 cxContainer, cxEdit, StdCtrls, cxTextEdit, cxMaskEdit, cxDropDownEdit;

type

 TcxComboBoxHack = class (TcxComboBox)
 public
   procedure MyFillCombo;
   procedure MyClearCombo;
 end;

 TForm50 = class(TForm)
   cxComboBox1: TcxComboBox;
   Button2: TButton;
   Button1: TButton;
   procedure Button2Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form50: TForm50;

implementation

{$R *.dfm}

procedure TForm50.Button1Click(Sender: TObject);
begin
 TcxComboBoxHack(cxComboBox1).MyFillCombo;
end;

procedure TForm50.Button2Click(Sender: TObject);
begin
 TcxComboBoxHack(cxComboBox1).MyClearCombo;
end;

procedure TForm50.FormCreate(Sender: TObject);
begin
 ReportMemoryLeaksOnShutdown := True;
end;

procedure TForm50.FormDestroy(Sender: TObject);
begin
 TcxComboBoxHack(cxComboBox1).MyClearCombo;
end;

{ TcxComboBoxHack }

procedure TcxComboBoxHack.MyClearCombo;
var
 i: Integer;
begin
 for i := Properties.Items.Count - 1 downto 0 do
 begin
 Properties.Items.Objects[i].Free;
   Properties.Items.Delete(i);
 end;
end;

procedure TcxComboBoxHack.MyFillCombo;
var
 i: Integer;
begin
 MyClearCombo;
 for i := 0 to 10 do
 Properties.Items.AddObject(IntToStr(i), TMemoryStream.Create);
end;

end.


 
Ega23 ©   (2012-07-30 15:39) [7]


> вообще не ожидал от тебя такого некорректного ответа. Если
> ты имеешь в виду как оно объявлено - то оно, конечно, да.
>
> Но реально TStrings там быть не может, естественно, как
> ты понимаешь )


В паблик вывалено TStrings. А что он там унутре использует - это уже не наше дело. Сегодня, например, TStringList. В следующем обновлении какой-нибудь TcxSuperPuperStrings, который потомок TStrings. Скрыто оно от нас, и нефиг трогать.
Либо пиши наследника и верти им как угодно.


 
Es   (2012-07-30 15:54) [8]

да не, я имел в виду твою фразу:


> Никак, Items там TStrings

я воспринял эту фразу, как ответ, что никак. И обоснование: потому что там Items является TStrings. И возник вопрос - ну и собственно что. Мало ли как объявлен Items, реально же скрыто может быть что угодно, а значит может быть есть какое событие, пусть даже и не published (как тот же propertiesChanged, который вызывается ВСЕГДА при удалении..).
Но я такого события, виртуальной функции не нашел, поэтому и завел ветку.. Мало ли есть, а я прозевал.


 
картман ©   (2012-07-30 19:05) [9]


> то есть чтобы при удалении строчки в комбо

а как ты удаляешь строчку?


 
Es   (2012-07-31 11:05) [10]

ну а какая разница...

В общем, решим проблему немного сбоку, ну да ладно, уже не важно )


 
картман ©   (2012-07-31 11:50) [11]


> ну а какая разница...

почему бы там же не удалять и объект?


 
Es   (2012-07-31 12:15) [12]

ну ты ж сам понимаешь - я не единственный разработчик, кто-то где-то может что-то забыть.



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

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.073 c
15-1346775365
pasha_golub
2012-09-04 20:16
2013.03.22
Как привести TList<TField> к простому TList


15-1340596830
ArchValentin
2012-06-25 08:00
2013.03.22
Обучение


15-1342873269
wl
2012-07-21 16:21
2013.03.22
подключение внешнего монитора к ноутбуку


2-1348073809
123456789igor
2012-09-19 20:56
2013.03.22
цикл в цикле


15-1351165516
картман
2012-10-25 15:45
2013.03.22
анализы крови





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