Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Вниз

Проблема при разработке графического компонента. 


VEG   (2001-12-15 21:35) [0]

Ну, вот решился начать учиться разработке компонентов... Это ДЕЙСТВИТЕЛЬНО не трудно, если РАЗОБРАТЬСЯ... Так вот, пытаюсь сделать компонент типа TImage. Вот куски кода:

unit Muar;

interface

uses
Classes, Graphics, Controls, ExtCtrls;

type
TMuar = class(TImage)
private

protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published

end;

procedure Register;

implementation
{$R Resources.res}

procedure TMuar.Paint;
var
FTD:integer;
bm:TBitmap;
begin
bm:=TBitmap.Create;
bm.Width:=Width;
bm.Height:=Height;

{Обрабатываю BitMap bm}

Canvas.Draw(0,0,bm);//А здась чего-то виснет(ошибки не происходит)
bm.Free;
end;

constructor TMuar.Create(AOwner: TComponent);
var
i:integer;
begin
inherited;
Align:=alTop;
Height:=50;
Transparent:=True;
AutoSize:=False;
Paint;
end;

destructor TMuar.Destroy;
begin
inherited;
end;

procedure Register;
begin
RegisterComponents("Samples", [TMuar]);
end;

end.

Так вот, в строке "Canvas.Draw(0,0,bm);" прога с этим компонентом чего-то виснет...



vasco   (2001-12-15 23:24) [1]

Ты вычеркнул самое интересное:
bm:=TBitmap.Create;
bm.Width:=Width;
bm.Height:=Height;

{Обрабатываю BitMap bm}

Canvas.Draw(0,0,bm);//А здась чего-то виснет(ошибки не происходит)
bm.Free;

И вообще, попробуй для начала подсунуть Canvas.Draw какой-нибудь битмап левый, например, рисунок TImage. Если скушает, тогда ты где-то портишь свой битмап в коде {Обрабатываю BitMap bm}.



DK   (2001-12-16 02:46) [2]

У тебя просто происходит рекурсивный вызов процедуры Paint.
Попобуй рисовать так: Canvas.CopyRect(ClientRect, bm.Canvas, ClientRect);
И всё же в данном случае destructor совсем не нужен.



BOSS_007   (2001-12-16 12:23) [3]

Так, ладно, я попробовал строчку Canvas.Draw(0,0,bm); заменить на Picture.Bitmap:=bm;. Произошло то же самое... А ваши подсказки сейчас попробую...



VEG   (2001-12-16 12:32) [4]

С моего компа выходил один чурка... Кароль забыл старый поставить...:-)
Так, ладно, я попробовал строчку Canvas.Draw(0,0,bm); заменить на Picture.Bitmap:=bm;. Произошло то же самое... А ваши подсказки сейчас попробую...



РУС   (2001-12-16 12:41) [5]

Чё-то я не догнал... Дык это ты в чате флудил?



vasco   (2001-12-16 14:14) [6]

>DK
Вообще-то не должно...
>VEG
Но если это так, то надо добавить тестовую переменную (логическую) и при входе в Paint проверять, если она равна true, то выходим из Paint. Если же нет, устанавливаем ее в true, производим рисование, "выключаем" эту переменную ( false) и завершаем Paint.



VEG   (2001-12-16 18:17) [7]

>РУС
Нет, флудил не я, сосед мой енто все затеял и осуществил... Меня уговорил, что бы я никому ниче не говорил, но он провалился: В моем счастливчике он придумывал вопросы, и в разделе Thanks написан его ник и E-Mail. У его нет выхода в и-нет, поэтому он опять таки меня уговорил(впервые), чтобы он вышел от меня в и-нет, а за это он мне придумает кучу вопросов... Это человек он такой... Любит выпендриваться по и-нету перед умнейшими его. Сам то он геймер, в программерстве ничего не понимает, поэтому и хочет повыпендриваться перед программерами. Вы бы у него спросили, например, что такое For To Do, он бы ничего не ответил т.к. он только знает только для чего есть begin и end. Баловаться он тут уже наврятли будет, т.к. он вечно в разных местах себя крутым вертит. Это ему, наверное, очень нравиться... Ты бы видел как он сидел у меня и ржал!!!
=>Это я ему дал выйти в и-нет первый и последний раз, а сам он выходит в основном из почты...
P.S: Не говори ему, если он еще раз придет сюда, что я рассказал тебе его дырку. Во время разгавора скажи, что кажысь знаешь откуда он:В моем счастливчике раздел Thanks его имя и E-Mail. Я даже больше, чем уверен, что он сюда больше не вернется после этого.



РУС   (2001-12-16 18:42) [8]

>>VEG
Ну-ну...



DK   (2001-12-19 03:11) [9]

2vasco © (16.12.01 14:14)
> >DK
>Вообще-то не должно...


Если это относится к моему ответу про рекурсию, то я тогда пробовал оригинальный и предложенный мною вариант.
Второй работал корректно, первый вызывал страшные глюки глюки, кроме того постоянно моргал.
Сейчас перепроверить не могу (снёс временно Дельфи - срочно нужно было место)




Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.044 c
4-19020           ikar                  2001-12-08 13:51  2002.02.07  
Системные ловушки и VCL


1-18854           Dmitry S. Negriy      2002-01-22 16:07  2002.02.07  
Прикол: TMemoryStream.Memory^ = (no value), хотя остальное видит


7-18997           XM-AD                 2001-10-22 11:48  2002.02.07  
Как забить на КиллПроцесс!???


1-18804           zool                  2002-01-24 20:27  2002.02.07  
Компоненты


3-18738           Fareader              2002-01-04 18:13  2002.02.07  
Filter в IBX