Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2009, 12:02   #1
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию из .exe TBitMap передать в DLL(форма)

У меня есть .exe(программа моя) в ней создаётся TBitMap , и мне надо этот TBitMap передать DLL(в DLLке находится форма ,для работы с TBitMap(это моя DLL))
Можно конечно сохранять в файл TBitMap и потом читать из DLL, но хочется без файлов
Вопросы:
1.)Можно ли передать из .exe TBitMap в DLL(форма) , если да то как , если можно поподробней
2.)Если через файл , то не потеряется ли качество после сохранения и чтения из файла , будет сохраняться в .BMP

Зарание спасибо за ответы
lexaltd вне форума Ответить с цитированием
Старый 14.07.2009, 12:22   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Может попробывать передавать сразу указатель на картинку, только осторожно, чтобы "переполнения" не вышло.
BaronTreep вне форума Ответить с цитированием
Старый 14.07.2009, 12:24   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну сделай в ДЛЛ процедуру с параметром типа TBitMap
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.07.2009, 12:44   #4
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну сделай в ДЛЛ процедуру с параметром типа TBitMap
Так как передать этот параметр типа TBitMap в ДЛЛ процедуру из .exe ???
Если можно с примером , я что то не как не могу догнать
lexaltd вне форума Ответить с цитированием
Старый 14.07.2009, 12:47   #5
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Похоже вы не знаете, что значит параметр:
Код:
procedure MyProcedure(Param1: integer; Param2: string; var Param3: TBitmap);
Понятно?
И передавать тоже просто:
Код:
MyProcedure(10, 'asdf', b);
где b - TBitmap
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 14.07.2009, 12:58   #6
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Вот как из ресурсов загрузить bmp в DLL:
Код:
library Project1;
uses
  Windows, Graphics;
procedure DrawBMP (Handle : THandle); export; stdcall;
var
  wrkBitmap : TBitmap;
  wrkCanvas : TCanvas;
begin
  wrkBitmap := TBitmap.Create;
  wrkCanvas := TCanvas.Create;
  try  
    wrkBitmap.LoadFromResourceName (HInstance, 'BMP1');
    wrkCanvas.Handle := Handle;
    wrkCanvas.Draw(0, 0, wrkBitmap);
  finally
    wrkCanvas.Free;
    wrkBitmap.Free;
  end;
end;
exports
  DrawBMP;
{$R DLLRes.res}  // подключение файлов ресурсов
begin 
end.
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 14.07.2009, 13:06   #7
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Вы не поверете я знал , что значит параметр
Вопрос не втом , может я не понятно написал

Например
Это в .exe
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
BitMap : TBitMap;
begin
 BitMap := TBitMap.Create;
 ShowDLL;// открывает форму в DLL
end;
Это в .DLL
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
 // Это событие происходит при открытии формы из DLL
 // и как суда передать BitMap из .exe
end;
Или вы имели введу типа такого ShowDLL(BitMap : TBitMap);// открывает форму в DLL

Последний раз редактировалось lexaltd; 14.07.2009 в 13:10.
lexaltd вне форума Ответить с цитированием
Старый 14.07.2009, 13:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я пожалуй подробнее распишу:
Вот ДЛЛ с процедурой, работающей с битмапом:
Код:
library Project1;

uses
  Graphics,
  SysUtils,
  Classes;

{$R *.res}
  procedure tb(b:TBitmap);
  begin
   if b<>nil then b.FreeImage;
  end;

  exports tb;
begin
end.
А вот так вызывать:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
   procedure tb(b:TBitmap); external 'Project1.dll';
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  tb(Image1.Picture.Bitmap);
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.07.2009, 15:15   #9
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Спасибо всем, получилось
Только почему - то не работает процедура Assign , вываливается ошибка

Cannot assign a TBitmap to a TBitmap.

Эта функция в ДЛЛ для открытия формы в ДЛЛ

Код:
function ShowAbout(Handle: THandle;BitMap : TBitMap):Longint;
begin
 Application.Handle:= Handle;
 Form1:= TForm1.Create(Application);
 Form1.Image1.Picture.Bitmap.Assign(BitMap);// тут вываливается ошибка 
 Form1.Show;
 Result:=LongInt(Form1);
end;
Пришлось сделать так

Код:
function ShowAbout(Handle: THandle;BitMap : TBitMap):Longint;
begin
  Application.Handle:= Handle;
  Form1:= TForm1.Create(Application);
  BitMap1 := TBitMap.Create;
  BitMap1.Width := BitMap.Width;
  BitMap1.Height := BitMap.Height;
  BitMap1.Canvas.Draw(0,0,BitMap);
  Form1.Image1.Picture.Bitmap.Assign(BitMap1);
  Form1.Show;
  Result:=LongInt(Form1);
end;
Можете объяснить почему не работает процедура Assign
lexaltd вне форума Ответить с цитированием
Старый 14.07.2009, 15:28   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Возможно нужно передавать var параметр:
Код:
function ShowAbout(Handle: THandle;var BitMap : TBitMap):Longint;
Однако, не пробовал.
И кстати, почему не попробовать обычным присваиванием?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Соединение DLL и EXE Alex Cones Общие вопросы Delphi 2 19.04.2009 16:20
Как передать данные в MDIChild-форму, загруженную из dll Shvonder Общие вопросы Delphi 0 18.03.2009 12:46
чтение из одного exe файла, и запись в другой exe inndim Общие вопросы Delphi 2 04.02.2009 15:23
TBitmap odi_noki Мультимедиа в Delphi 17 25.10.2008 09:53