Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
ВнизЛамерский вопрос про создание своих компонентов Найти похожие ветки
← →
GGWIN (2002-10-21 18:53) [0]Имеется следующее как пример.
unit CoolPanel;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls;
type
TCoolPanel = class(TPanel)
private
FBGImage: TBitmap;
procedure SetBGImage(Value: TBitmap);
{ Private declarations }
protected
procedure WMPaint(var m: TWMPaint); message WM_PAINT;
procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;
{ Protected declarations }
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{ Public declarations }
published
property BGImage: TBitmap read FBGImage write SetBGImage;
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Samples", [TCoolPanel]);
end;
constructor TCoolPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FBGImage := TBitmap.Create;
end;
destructor TCoolPanel.Destroy;
begin
FBGImage.Free;
inherited Destroy;
end;
procedure TCoolPanel.SetBGImage(Value: TBitmap);
begin
if FBGImage <> Value then FBGImage.Assign(Value);
end;
procedure TCoolPanel.WMEraseBkgnd(var m : TWMEraseBkgnd);
begin
m.Result := LRESULT(False);
end;
procedure TCoolPanel.WMPaint(var m: TWMPaint);
var
x, y: Integer;
begin
inherited WMPaint;
y := 0;
while y < Height do
begin
x := 0;
while x < Width do
begin
Canvas.Draw(x, y, BGImage);
x := x + BGImage.Width;
end;
y := y + BGImage.Height;
end;
end;
end.
Вопрос почему при перетаскивании данного компонента на форму все наглухо виснет?
← →
Ricks (2002-10-21 18:59) [1]Может из-за Сanvas.Draw? Может оно перерисовывает окно??? Может проще использовать BitBlt (и быстрей)???
← →
GGWIN (2002-10-21 19:15) [2]Bitblt пробовал - та-же фигня.
← →
VaS (2002-10-21 19:24) [3]вместо inherited WMPaint напиши просто inherited. Больше ошибок не видно вроде...
← →
TTCustomDelphiMaster (2002-10-21 19:28) [4]А при создании run-time не виснет?
← →
Набережных С. (2002-10-21 19:43) [5]У BGImage width = 0, равно как и Height;
← →
GGWIN (2002-10-21 19:47) [6]В run-time - все пучком. А мне нуно и при разработке!
← →
GGWIN (2002-10-21 19:57) [7]А размеры по-моему в данном случае не роляют.
Я же еще картинку не вбахал, а просто создал объект.
← →
TTCustomDelphiMaster (2002-10-21 20:04) [8]А если картинки нет, то зачем ее рисовать?
← →
GGWIN (2002-10-21 20:17) [9]Дык блин!
Перетаскиваешь ты на форму TImage - картинки еще нет.
Затем нажимаешь кнопочку рядом со свойством Picture и ставишь картинку - теперь картинка есть.
Мне нуно то-же самое но для своего компонета!
В чем блин проблема в выше приведенном коде!!!???
← →
Набережных С. (2002-10-21 20:40) [10]Печально... У тебя цикл бесконечный.
← →
GGWIN (2002-10-21 21:12) [11]В смысле...
← →
TTCustomDelphiMaster (2002-10-21 21:32) [12]y := 0;
while y < Height do
begin
x := 0;
while x < Width do
begin
Canvas.Draw(x, y, BGImage);
x := x + 0;
end;
y := y + 0;
← →
GGWIN (2002-10-22 19:00) [13]Это все ботва!!!
Но спасибо вам TTCustomDelphiMaster ваш ответ навел меня на правильную мысль.
Итак. Все кому интересно смотрите:
При перетаскивании данной панели на форму - она (панель) сразу-же пытается нарисоваться. А метод прорисовки пытается нарисовать еще не существующее изображение: BGImage.isEmpty (создано, но не заполнено).
И уже из этой причины получается следствие про бесконечный цикл.
Вот.
Всем спасибо!
Коллективный разум победил!
← →
TTCustomDelphiMaster (2002-10-22 19:13) [14]спасибо Набережных С.
← →
GGWIN (2002-10-22 20:23) [15]Упссс ...
Вообщем спасибо всем
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c