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

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

Мастера, помогите с компонентом, наследником TStringGrid... [D6, WinXP]


^Sanya ©   (2002-10-31 23:48:00) 

Создаю для курсовика компонент TExStringGridот TStringGrid.
Появились следующие проблемы:

1-как при изменении определённых свойств компонента осуществлять его перерисовку в design-mode?
Я исопльзовал Invalidateи InvalidateGrid, которые использует Borland(R)в модуле Grids, но почему у Borland"а всё работает как надо (напр. при изменении св-ва Color StringGridсразу же перерисовывается), а у меня всё перерисуется, только если я перенесу мышкой компонент за пределы формы и верну обратно - то есть вручную и коряво.

2-как убрать из инспектора объектов св-ва Colorи Fontпри условии, что мой компонент - наследник от TStringGrid, а вещей типа "TCustomStringGrid"не существует? А выбирать другого предка и заново рожать св-ва типа Cellsя не собираюсь:)
Буду очень признателен за ответы, а пока буду рыться в книгах...


Юрий Зотов   (2002-11-02 20:21:00) [1]

Ох, дружище, как все плохо, как все плохо...

1. Классы TColors и TFonts неработоспособны (нет Assign). В итоге SetFonts будет давать 100%-ную ошибку ("Can not assign ... to ..."), а SetColors - 100%-ные глюки и утечку памяти (переназначение внутренней ссылки на внешний объект).

2. Внутренние фонты FTableFont и FTableFxdFont должны создаваться и уничтожаться их контейнером TFonts, а не где-то там снаружи. Соответственно, для них должнв быть методы доступа по записи. Кстати, оба этих фонта у Вас не уничтожаются и снова идет утечка памяти.

3. При изменении отдельного фонта или цвета ничего не перерисовывается (да и вообще ничего не происходит). Думаю, Вы хотели получить обратное.

4. DrawCell не позволяет юзеру применить свою прорисовку, а если он попытается это сделать, то прорисовка получится двойной. Это и не гибко, и дает лишний тормоз. Так компоненты не пишут.

5. > Invalidate не генерирует OnDrawCell для каждой ячейки???
Нажмите F1. Там написано "entire control". Перевести?

6. > Что значит выражение "класс редактора"?
См. справку ("property editors" и RegisterPropertyEditor).


^Sanya   (2002-11-02 18:44:00) [2]

Поясните, пожалуйста, следующие слова:

> 2. Зарегистрируйте для ненужных свойств nil вместо класса
> редактора.


^Sanya   (2002-11-01 21:43:00) [3]

В
procedure TExStringGrid.SetColors(const Value: TColors);
var
i, j: byte;
begin
FColors := Value;
Invalidate
end;


переменные i, j не нужны, sorry.
Пожалуйста, помогите :)


^Sanya   (2002-11-01 20:06:00) [4]


> 2. Зарегистрируйте для ненужных свойств nil вместо класса
> редактора.


Что значит выражение "класс редактора"?
Класс-владелец метода, который "пишет"(стоит после write) свойство?
Можно ли поподробней?

Привожу исходник компонента:

unit ExStringGrid;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids;

type TColors = class(TPersistent)
private
FTableColor,
FTableBgrndColor,
FTableBrdrColor,
FTableFxdBgrndColor,
FTableFxdBrdrColor : TColor;
//procedure SetTableBgrndColor(A : TColor);
published
//


Юрий Зотов   (2002-11-01 18:09:00) [5]

1. Invalidate должно работать. Если не работает - значит что-то Вы намудрили в другом месте.

2. Зарегистрируйте для ненужных свойств nil вместо класса редактора.


^Sanya   (2002-11-01 17:29:00) [6]

пожалуйста...


Наверх

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