Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 22.04.2019, 19:52   #1
qwertyui123
 
Регистрация: 19.08.2013
Сообщений: 8
Репутация: 10
По умолчанию Передача Handle из DLL

Добрый день, так и не смог по мануалам форума понять как работает эта технология передачи. В PaintBox ничего не выводится

DLL

Код:
  Function C_Axis(H:HDC):HDC;
  stdcall; export;
  var
  CAxis:Tcanvas;

begin
    CAxis :=TCanvas.Create;
    try
      CAxis:=Tcanvas.Create;
      with CAxis do Begin
        Handle := H;
        Brush.Color:=clGreen;
        Pen.Color:=clGreen;
        FillRect(rect(0,0,100,100));
        moveto(50,50);
        lineto(100,100);
      End;
      Result:=CAxis.Handle;
    finally
    CAxis.Handle:=0;
    CAxis.Free;
    H:=0;
    end;
end;
Приложение

Код:
procedure TForm1.Button1Click(Sender: TObject);

begin

 bm_img:=TBitmap.Create;
 bm_img.PixelFormat:=pf24bit;
 bm_img.Width:=100;
 bm_img.Height:=100;

 bm_img.Canvas.Handle:=C_Axis(bm_img.Canvas.Handle);

 bitblt(PaintBox1.Canvas.Handle, 0, 0,100,100, bm_img.Canvas.Handle,0,0,SRCCopy);

 PaintBox1.invalidate;
 bm_img.Free;
end;
Подскажите где ошибка.
qwertyui123 вне форума   Ответить с цитированием
Старый 29.05.2019, 10:05   #2
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Адрес: Московская Область, скверное место, не рекомендовал бы тут жить.
Сообщений: 359
Репутация: 248
По умолчанию

э... Зачем вы два раза создали TCanvas?
Зачем вы возвращаете CAxis.Handle в Result, когда оно к моменту выхода уже будет не валидно?
Зачем приравнивать H к нулю? Это же у вас локальная переменная...
Зачем bitblt, когда по идее нада просто C_Axis(PaintBox1.Canvas.Handle)?
Вы не понимаете, что даже если у вас там что-то и рисуется, команда PaintBox1.invalidate() как раз всё стирает..?
И кстати зачем вам лишний битмап?
ResourceSpace вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HANDLE РоРоРоЛоЛоЛо Помощь студентам 2 18.11.2013 15:01
Передача информации по средствам Handle и HWND?! (Delphi) Npwas Помощь студентам 2 20.06.2012 14:43
php $handle KANDRAT PHP 5 11.12.2011 16:10
Как узнать handle окна имея handle обного из его компонентов SeRhy Win Api 2 18.10.2009 19:31
Как имея handle окна узнать handle edit-a который находится в етом окне SeRhy Общие вопросы Delphi 1 20.07.2008 13:48


15:03.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru