Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.036 c
1-1083146120
Immortal
2004-04-28 13:55
2004.05.16
перерисовка региона


3-1081976637
Coder
2004-04-15 01:03
2004.05.16
Загадочный вопрос по SQL (ХП)


3-1082460803
Fishka
2004-04-20 15:33
2004.05.16
DBCtrlGrid и поиск


6-1080647659
SAG
2004-03-30 15:54
2004.05.16
UDPSocket не получает сообщение


14-1082643926
Учащийся
2004-04-22 18:25
2004.05.16
Локализация программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский