Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Прошу помощи продвинутых. Создание компоненты   Найти похожие ветки 

 
siriusP   (2004-04-27 14:29) [0]

,т.к. на этот вопрос я не получил ответа.
Делаю компонент: PanelEx, на которой выстраиваю другой компонент SpdBtn (например, в 3 ряда по 3 кнопки в ряду, всего 9).
TSpdBtn = class(TSpeedButton);
 protected
   FCol: integer;
   FRow: integer;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   property Col: integer read FCol write FCol;
   property Row: integer read FRow write FRow;
 end;

TPanelEx = class(TPanel);
 protected
   FSpdBtn: TList;
   FGlyphDown: TBitmap;
   FGlyphUndown: TBitmap;

   procedure SetGlyphDown(aGlyphDown: TBitmap);virtual;
   procedure SetGlyphUndown(aGlyphUndown: TBitmap);virtual;
   function GetGlyphDown: TBitmap;virtual;
   function GetGlyphUndown: TBitmap;virtual;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 published
   property GlyphDown: TBitmap read GetGlyphDown write SetGlyphDown;
   property GlyphUndown: TBitmap read GetGlyphUndown write SetGlyphUndown;
 end;

В TPanelEx добавлено 2 свойства - картинки на SpdBtn
FGlyphDown: TBitmap;
FGlyphUndown: TBitmap;
В дизайнере картинки загружаются, а после разрузки приложения нет. Прошу откликнуться знающих. Спасибо.

constructor TPanelEx.Create(AOwner: TComponent);
 var tmpI, tmpJ: integer;
     tmpSpdBtn: TSpdBtn;
begin
 inherited Create(AOwner);
 FGlyphDown:= TBitmap.Create;
 FGlyphUndown:= TBitmap.Create;
 FSpdBtn:= TList.Create;

 for tmpI:= 0 to 2 do begin
   for tmpJ:= 0 to 6 do begin
     tmpSpdBtn:= TPrintSB.Create(self);
     tmpSpdBtn.Parent:= self;
     tmpSpdBtn.AllowAllUp:= true;
     tmpSpdBtn.GroupIndex:= tmpIndx;
     tmpSpdBtn.Down:= true;
     //tmpSpdBtn.Left:= tmpL + (tmpW + tmpSV) *tmpI;
     //tmpSpdBtn.Top:= tmpT + (tmpH + tmpSH) *tmpJ;
     //tmpSpdBtn.Height:= tmpH;
     //tmpSpdBtn.Width:= tmpW;
     tmpSpdBtn.Col:= tmpI;
     tmpSpdBtn.Row:= tmpJ;
     FSpdBtn.Add(tmpSpdBtn);
   end;
 end;
end;

procedure TPanelEx.SetGlyphDown(aGlyphDown: TBitmap);
begin
 FGlyphDown.Assign(aGlyphDown);
 for tmpI:= 0 to FPrintSB.Count-1 do begin
   if (TPrintSB(FPrintSB.Items[tmpI]).Down) then TPrintSB(FPrintSB.Items[tmpI]).Glyph.Assign(FGlyphDown);
 end;
end;

procedure TPanelEx.SetGlyphUndown(aGlyphUndown: TBitmap);
begin
 FGlyphUndown.Assign(aGlyphUndown);
 for tmpI:= 0 to FPrintSB.Count-1 do begin
   if not(TPrintSB(FPrintSB.Items[tmpI]).Down) then TPrintSB(FPrintSB.Items[tmpI]).Glyph.Assign(FGlyphUndown);
 end;
end;


 
Тимохов ©   (2004-04-27 14:31) [1]

все дожны искать ваш прошлый топик и читать тАм вопрос?


 
siriusP   (2004-04-27 14:33) [2]

Нет, я же Вам здесь написал!


 
Тимохов ©   (2004-04-27 14:33) [3]


> Тимохов ©   (27.04.04 14:31) [1]
> все дожны искать ваш прошлый топик и читать

виноват, вопрос прогладел.


 
Тимохов ©   (2004-04-27 14:37) [4]

попробуйте поставить

>  FGlyphDown:= TBitmap.Create;
>  FGlyphUndown:= TBitmap.Create;

до вызова предочного конструктора.


 
siriusP   (2004-04-27 14:41) [5]

Попробовал, тоже самое.


 
Тимохов ©   (2004-04-27 14:42) [6]


> siriusP   (27.04.04 14:41) [5]

тогда не знаю.
когда то делал такое, но как не помню - книжка была под рукой.


 
Reindeer Moss Eater ©   (2004-04-27 14:47) [7]

Экземпляр панели создался.
Битмапы считались из ресурсов DFM в свойства панели.
На этот момент в списке FPrintSB вообще может не быть ни одного элемента и цикл будет пустой

for tmpI:= 0 to FPrintSB.Count-1 do begin


 
siriusP   (2004-04-27 14:49) [8]

И что делать?


 
Reindeer Moss Eater ©   (2004-04-27 14:51) [9]

Трассировать код.
Ты уверен что в цикле есть хотя бы одна итерация?
Это так сложно проверяется, что ставит тебя в тупик?


 
siriusP   (2004-04-27 15:02) [10]

В конструкторе я делаю tmpSpdBtn.Glyph.Assign(GlyphDown), но в GlyphDown ничего нет.
А почему, ведь в дизайнере я положил картинку?


 
Reindeer Moss Eater ©   (2004-04-27 15:04) [11]

Потому что после конструктора паблишед свойства еще могут поменяться в процессе загрузки.


 
Тимохов ©   (2004-04-27 15:07) [12]

если не ошибаюсь есть вирт. метод loaded.


 
siriusP   (2004-04-27 15:07) [13]

Я не понимаю как это победить.


 
Reindeer Moss Eater ©   (2004-04-27 15:08) [14]

КОД ТРАССИРОВАТЬ.
А побеждать ничего не надо.


 
siriusP   (2004-04-27 15:34) [15]

Трассер в SetGlyph... вообще не заходит :((


 
Reindeer Moss Eater ©   (2004-04-27 15:40) [16]

Это значит, что свойствам GlyphDown и GlyphUndown никто и никогда не присваивает значения.

Панель оформлена в виде компонента и инсталирована в палитру?
Экземпляр есть на форме?
Во "View as Text" видно что в DFM сохранены битмапы?


 
siriusP   (2004-04-27 16:03) [17]

Да - ответ на все вопросы.


 
Reindeer Moss Eater ©   (2004-04-27 16:17) [18]

В твоем вопросе указан один код, а разговор идет про другой.
Это не тот код.


 
siriusP   (2004-04-27 16:34) [19]

Тот за исключением:
procedure TPanelEx.SetGlyphDown(aGlyphDown: TBitmap);
begin
 FGlyphDown.Assign(aGlyphDown);
 for tmpI:= 0 to FPrintSB.Count-1 do begin
   if (TSpdBtn(FSpdBtn.Items[tmpI]).Down) then TSpdBtn(FSpdBtn.Items[tmpI]).Glyph.Assign(FGlyphDown);
 end;
end;

procedure TPanelEx.SetGlyphUndown(aGlyphUndown: TBitmap);
begin
 FGlyphUndown.Assign(aGlyphUndown);
 for tmpI:= 0 to FPrintSB.Count-1 do begin
   if not(TSpdBtn(FSpdBtn.Items[tmpI]).Down) then TSpdBtn(FSpdBtn.Items[tmpI]).Glyph.Assign(FGlyphUndown);
 end;
end;


 
Reindeer Moss Eater ©   (2004-04-27 16:38) [20]

некоторые твои утверждения не стыкуются между собой.

№15 и №17



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

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
1-1083230319
Петя
2004-04-29 13:18
2004.05.16
Автоскрол в TRichEdit


1-1082972077
MikePol
2004-04-26 13:34
2004.05.16
Подключение dll


3-1082531110
dimm22
2004-04-21 11:05
2004.05.16
А пользуется ли кто нибудь ручным планированием запросов?


3-1082623665
AlexXn
2004-04-22 12:47
2004.05.16
Одновременный доступ к данным


1-1082750758
ALF
2004-04-24 00:05
2004.05.16
Самодельный скин к программе и системные шрифты