![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ламерский вопрос про создание своих компонентов
GGWIN © (2002-10-21 18:53:00)Имеется следующее как пример.
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.
Вопрос почему при перетаскивании данного компонента на форму все наглухо виснет?
GGWIN (2002-10-22 20:23:00) [1]Упссс ...
Вообщем спасибо всем
TTCustomDelphiMaster (2002-10-22 19:13:00) [2]спасибо Набережных С.
GGWIN (2002-10-22 19:00:00) [3]Это все ботва!!!
Но спасибо вам TTCustomDelphiMasterваш ответ навел меня на правильную мысль.
Итак. Все кому интересно смотрите:
При перетаскивании данной панели на форму - она (панель) сразу-же пытается нарисоваться. А метод прорисовки пытается нарисовать еще не существующее изображение: BGImage.isEmpty (создано, но не заполнено).
И уже из этой причины получается следствие про бесконечный цикл.
Вот.
Всем спасибо!
Коллективный разум победил!
TTCustomDelphiMaster (2002-10-21 21:32:00) [4]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-21 21:12:00) [5]В смысле...
Набережных С. (2002-10-21 20:40:00) [6]Печально... У тебя цикл бесконечный.
GGWIN (2002-10-21 20:17:00) [7]Дык блин!
Перетаскиваешь ты на форму TImage - картинки еще нет.
Затем нажимаешь кнопочку рядом со свойством Picture и ставишь картинку - теперь картинка есть.
Мне нуно то-же самое но для своего компонета!
В чем блин проблема в выше приведенном коде!!!???
TTCustomDelphiMaster (2002-10-21 20:04:00) [8]А если картинки нет, то зачем ее рисовать?
GGWIN (2002-10-21 19:57:00) [9]А размеры по-моему в данном случае не роляют.
Я же еще картинку не вбахал, а просто создал объект.
GGWIN (2002-10-21 19:47:00) [10]В run-time - все пучком. А мне нуно и при разработке!
Набережных С. (2002-10-21 19:43:00) [11]У BGImage width = 0, равно как и Height;
TTCustomDelphiMaster (2002-10-21 19:28:00) [12]А при создании run-time не виснет?
VaS (2002-10-21 19:24:00) [13]вместо inherited WMPaint напиши просто inherited. Больше ошибок не видно вроде...
GGWIN (2002-10-21 19:15:00) [14]Bitblt пробовал - та-же фигня.
Ricks (2002-10-21 18:59:00) [15]Может из-за Сanvas.Draw? Может оно перерисовывает окно??? Может проще использовать BitBlt (и быстрей)???