Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

рисование на TCanvas из DLL [D6, Win2k]


Gloster ©   (2004-11-30 20:02:00) 

Пытаюсь рисовать на канве Image.Canvas из DLL, например, эллипс. Один раз рисует, при попытке нарисовать второй раз и более ... посылает! Как обойти?! Очень нужно рисовать на канве именно из динам. библиотеки!!! Спасибо.


Gloster   (2004-12-02 17:14:00) [1]

Господа! Все равно ничего не работает, вроде теоретически все понятно (см. статью), но при попытке реализовать рекомендации по использованию ShareMem все валится! Работа с bplинами мне не нравится --- не исключено, что dll, которую я пишу, пригодится мне для Cи! Я понял две вещи: либо не связываться с VCL, либо с Delphi!
Кстати, никто не пробовал написать свой менеджер памяти?!


Gloster   (2004-12-01 19:02:00) [2]

Алхимику: Спасибо за информативную ссылку, вроде разобрался!
dimaxx: Передавать HDC не проще, я пробовал, перед тем как обратиться на Форум. Не работает 100%!!!!


dimaxx   (2004-12-01 01:19:00) [3]

Господа, а не проще ли передавать HDC (TCanvas.Handle) и не париться с передачей ссылки на класс? Благо рисование на канве растет из API. А в API как раз применяется HDC.


Алхимик   (2004-11-30 23:50:00) [4]

Одним из модулей, входящих в стандартную библиотеку, является менеджер динамической памяти. Он используется не только при явных операциях с динамической памятью, но также при создании объектов, при работе со строками и динамическими массивами.

http://softwarer.ru/packages.html#Memory


Gloster   (2004-11-30 20:53:00) [5]

Код примерно такой: в основной программе такие две процедуры. На Button1Click рисуется эллипс. На Button2Click рисуется эллипс из процедуры DLL (см. ниже). Штука в следующем: если Вы щелкаете по Button1, рисуется эллипс, если по Button2 --- возникает ошибка. И наоборот!!

procedure RisEll(x1,y1: Integer; CAnvas: TCanvas); external 'RisEllips.dll';
procedure TForm1.Button1Click(Sender: TObject);
var x1,x2,y1,y2: Integer;
begin
x1:=StrToInt(Edit1.Text);
y1:=StrToInt(Edit2.Text);
x2:=x1+100;
y2:=y1+100;
Form1.Image1.Canvas.Pen.Color:=clRed;
Form1.Image1.Canvas.Ellipse(x1,y1,x2,y2);
end;

procedure TForm1.Button2Click(Sender: TObject);
var x1,y1,i,j: Integer;
begin
x1:=StrToInt(Edit1.Text);
y1:=StrToInt(Edit2.Text);
for i:=0 to 1 do
begin
 RisEll(x1,y1,Form1.Image1.Canvas);
end;
end;

procedure RisEll(x1,y1: Integer; Canvas: TCanvas);
var x2,y2: Integer;
begin
x2:=x1+100;
y2:=y1+230;
Canvas.Pen.Color:=clGreen;
Canvas.Pen.Width:=12;
Canvas.Ellipse(x1,y1,x2,y2);

end;


Алхимик   (2004-11-30 20:36:00) [6]

В 17- строке ошибка.
В смысле код давай.


Наверх

Титульная страница Поиск, карта сайта Написать письмо