Всем доброго времени суток уважаемые программисты! На сегодня возник такой вопрос: есть скажем TStringList, нужно отследить и вывести, тот пункт, который удалили/добавили. Как сие сделать? Если кто сможет - напишите пример. Буду очень признателен!
OnChange, OnChanging, не? Так же можешь сделать производный класс от TStringList и переопределить нужные методы.
2 RedFern.89 ты случаем не перепилли? стринг лист это не визуальный компонент. И то что ты туда добавляешь и удаляешь - ты сам это делаешь. Или ты собрался следить за самим собой? Исключение если там данные изменяются какимто компонентом, то тогда да. Лучше сделать наследник от него который будет иметь нужные действия.
Ему наверно надо отслеживать изменения в дереве. RedFern.89, если я прав то советую заново спроектировать архитектуру приложения, ибо проблем огребете еще не раз.
все дело вот в чем. TStringList меняется раз в секунду. Там идет список дисков< который обновляется скажем раз в секунду. Мне надо проследить какие диски ушли/добавились.
дык в чем вопрос то лочим список смотрим анлочим примерно так Code: hardware_list_lock(); lookup(); hardware_list_unlock(); или трудности с просмотром ? или там где происходит изменение добавление удаление там и запоминай изменения куда нить а потом в том месте где они нужны смотри из ранее сохраненного места можно по месту смотреть но это крайне неэффективно типа Code: hardware_list_lock(); lookup_diff(); смотрит отличия в списках dup_list(primary_list, slave_list); делает копию hardware_list_unlock(); но это неэффективно очень если есть возможность сохранять лучше там где эти изменения происходят
К сожалению события OnChange и OnChanging у TStringList имеют тип TNotifyEvent, по-этому ничего кроме Sender обрабатывая их не получишь. По-этому наследуешь от него, переопределяешь методы Add, Delete, Insert etc, (благо они все виртуальные) в них вызываешь родительские методы и вызываешь свое событие передавая в него нужные данные, например строку которая была добавлена например: PHP: type TMyAddEvent = procedure (const s: string) of object; TMyStringList = class(TStringList) private FOnAdd: TMyAddEvent; public property OnAdd: TMyAddEvent: read FOnAd write FOnAd; function Add(const s: string): Integer; override; ........................ end; ............................... function TMyStringList.Add(const s: string): Integer; begin Result := inherited (s); if Assigned(FonAdd) then FOnAdd(s); end; Ну а уже обрабатывая событие извне будешь знать какая строка была добавлена Главное не внедрять логику конкретного приложения в этот класс, чтобы его можно было повторно использовать в дальнейшем.