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

Вниз

Ламерский вопрос про создание своих компонентов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
3-11068
dimonf
2002-10-14 21:38
2002.11.04
Народ, что за формат базы bdf???


14-11393
dogma
2002-10-14 14:17
2002.11.04
База данных или блокнот?


3-11101
Андрусь
2002-10-15 22:17
2002.11.04
---|Ветка была без названия|---


6-11377
Grande
2002-08-30 12:24
2002.11.04
Как прослушать порт?


1-11230
Vikuksa
2002-10-25 10:27
2002.11.04
Проблемы с памятью