Форум: "Основная";
Текущий архив: 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.037 c