Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Взаимодействие компонентов [D6, Win2k]


Валерыч ©   (2003-01-05 03:23:00) 

Уважаемые мастера. Прошу помочь разобраться с проектированием новых комопонентов (а может объектов). Задача такая:
- нужен объект / компонент / запись или что-то другое как элемент некой картинки со свойствами: номер цвета из палитры для основного цвета клетки, четыре номера цветов из палитры для границ клетки
- нужен массив таких элементов как картинка, скорее всего оформленный как компонент, потому как хочется иметь набор методов по обработке картинки
- нужет компонент, умеющий нарисовать эту картинку и воспринимающий изменения, происходящие с ней, т.е. получающий соответствующие уведомления, если я чего-то даже програмно меняю в любой точке (предполагал отталкиваться от DrawGrid). желательно, чтобы он имел свойство, ссылающееся на картинку.
Я новичок и не понимаю как правильно выбрать где использовать компоненты, а где объекты, как правильно передавать уведомления об изменении свойств точки (элемента) компоненту отрисовки.
Заранее спасибо.


KSergey   (2003-01-13 09:55:00) [1]

Может посмотреть как это реализовано для DataSource/DBGrid и т.п.? Как-то же там реализована именно такая механика.


Думкин   (2003-01-13 09:25:00) [2]

Надо из объекта при изменении послать сообщение об этом.
Осталось разобраться - кому и куда.


Валерыч   (2003-01-13 09:16:00) [3]

TStringGrid, конечно, очень хорошо, НО мне хотелось бы иметь возможность иметь картинку в чистом виде как компонент (объект) в программе, чтобы с ней манипулировать (изменять) без визуализации (например картинка за кадром). Т.е. компонент, который ее отображает на экране должен содержать ссылку на компонент самой картинки. Ну типа есть TStringList и TListBox.

По поводу событий на изменение: если я имею отдельный объект - картинку + компонент, который ее может отображать, то хочется иметь возможность реагировать компонентом отрисовки на изменение компонента картинки. Предположим я у картинки создаю событие OnChange, генерирующееся при любых изменениях оной. Первая мысль - компонент отображения цепляется к этому событию и реагирует. Тогда для программиста данное событие становится недоступно или потеряется связь с компонентом отображения. Т.е. картинка должна знать, отображает ли ее некий другой компонент, и, если отображает, уведомлять его при изменениях, оставляя программисту OnChange для своих нужд.


Roma   (2003-01-10 15:46:00) [4]

Лучше TStringGrid (TDrawGrid - его прямой предок). Все необходимые события у него есть. Информацию о ячейках (какую хочешь) можно хранить в свойстве Objects. Надо только спроектировать свой объект, описывающий отдельную ячейку...
Не надо выдумывать (и делать) велосипеды (новые компоненты) - "все уже украдено до нас"... ;)


Думкин   (2003-01-10 07:25:00) [5]

1.Я с DrawGrid не работал - но там есть возможность отрисовки каждой клетки, поэтому вроде можно и через него.
У тебя видимо проблема в том откуда брать и где хранить инфу для отрисовки каждго квадратика?
2. Можно создать свое.
а)Создаешь класс с картинкой и нужными свойствами и чтобы реагировал на изменения - какие?
б)Создаешь класс контейнер. Элементы класса а) держать можно по разному - ты и сам прописал возможности.
С onChange проблем не должно быть, только надо пояснить про какой Change идет речь, и как он должен влиять на класс контейнер.


Валерыч   (2003-01-10 05:05:00) [6]

Ладно, как говорится, осташиеся карты на стол. Хочу нарисовать жене небольшую прогу для вышивки крестом. Соответственно картинка - набор квадратиков, раскрашенных разными цветами из набора. Каждый такой квадратик - элемент картинки, который помимо основного цвета может быть ограничен каким-то дополнительным цветом с любой стороны (которых четыре). Картинка соответственно прямоугольная. Вот собственно и все.


Думкин   (2003-01-09 06:54:00) [7]

Еще немного измени вопрос и тебе помогут.

> Для картинки как лучше выполнить хранилище элементов - динамический
> массив или какими-нибудь списками а ля в StringGride

Каких элементов - какое хранилище?


Валерыч   (2003-01-09 05:45:00) [8]

Ладно, попробую изменить вопрос.
Допустим я оформляю элемент как компонент с соответствующими свойствами, методами и событиями, среди которых есть OnChange
Затем я делаю компонент картинки, который имеет свое событие OnChange, при этом записывает в событие OnChange элемента свой обработчик, чтобы отлавливать изменения оного.
Далее я делаю компонент отображения, который должен ссылаться на компонент картинку и уметь перехватывать его OnChange. Но я хочу также оставить программеру (т.е. себе :))) возможность обрабатвыать паралельно данное событие. Значит я не имею права в компоненте отображения устанавливать обработчик OnChange картинки на свою процедуру, а должен сделать это как-то по другому. Вопрос КАК???
И еще. Для картинки как лучше выполнить хранилище элементов - динамический массив или какими-нибудь списками а ля в StringGride


Валерыч   (2003-01-08 04:18:00) [9]

всех с прошедшими празниками. кто-нибудь уже в состоянии мыслиить?


Валерыч   (2003-01-05 07:47:00) [10]

мастерааа...


Наверх

Титульная страница Поиск, карта сайта Написать письмо