Главная страница
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.018 c
1-11203
Solovey
2002-10-23 01:00
2002.11.04
Перевод числа из 16-ричной системы в 10-чную.


1-11264
Gaber
2002-10-21 13:39
2002.11.04
Запуск приложения


1-11208
Юрий
2002-10-24 21:14
2002.11.04
TClientSocket и TServerSocket в одной процедуре


3-11116
4nikandr
2002-10-16 13:22
2002.11.04
TBatchMove


1-11166
acorus
2002-10-23 21:09
2002.11.04
Где в Дельфи включаются hints для значений в дебаг режиме?