![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мастера, помогите с компонентом, наследником TStringGrid... [D6, WinXP]
^Sanya © (2002-10-31 23:48:00)Создаю для курсовика компонент
TExStringGridотTStringGrid.
Появились следующие проблемы:
1-как при изменении определённых свойств компонента осуществлять его перерисовку в design-mode?
Я исопльзовалInvalidateиInvalidateGrid, которые использует Borland(R)в модулеGrids, но почему у Borland"а всё работает как надо (напр. при изменении св-ваColorStringGridсразу же перерисовывается), а у меня всё перерисуется, только если я перенесу мышкой компонент за пределы формы и верну обратно - то есть вручную и коряво.
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]пожалуйста...