Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизDLL Найти похожие ветки
← →
ChcngerMan (2004-03-12 13:40) [0]Мне нужно, чтобы через Дллку появилось окно, делаю так:
Код самой длл:
library twain;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ImageEnView, ImageEnIO, ComCtrls,
Options in "Options.pas" {Form1};
{$R *.res}
function ShowMyDialog: Boolean;
begin
{Создаем экземпляр Form1 формы TForm1}
Form1 := TForm1.Create(Application);
{В Label1 выводим Msg}
{Возвращаем True только если нажата OK (ModalResult = mrOk)}
//Result := (Form1.ShowModal = mrOk);
{Освобождаем память}
// Form1.Free;
end;
EXPORTs ShowMyDialog;
end.
Код формы:
unit oPTIONS;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ImageEnView, ImageEnIO, ComCtrls;
type
TForm1 = class(TForm)
ImageEnIO1: TImageEnIO;
ImageEnView1: TImageEnView;
Panel1: TPanel;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
GroupBox2: TGroupBox;
ComboBox1: TComboBox;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
ComboBox2: TComboBox;
CheckBox2: TCheckBox;
GroupBox3: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Button1: TButton;
Button2: TButton;
ProgressBar1: TProgressBar;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
CheckBox5: TCheckBox;
Button3: TButton;
procedure FormActivate(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ImageEnIO1Progress(Sender: TObject; per: Integer);
procedure CheckBox5Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
procedure FillBack; // copy twain parameters to the controls
procedure FillIn; // copy controls to twain parameters
public
{ Public declarations }
end;
var
Form1: TForm1;
BitMap:TBitmap;
implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
var
i:integer;
begin
// fills TWain sources
for i:=0 to ImageEnIO1.TWainParams.SourceCount-1 do
ComboBox1.Items.Add( ImageEnIO1.TWainParams.SourceName[i] );
// Select first scanner
ComboBox1.ItemIndex:=0;
ImageEnIO1.TWainParams.SelectedSource:=ComboBox1.ItemIndex;
ImageEnIO1.TWainParams.AppVersionInfo:="1.0";
ImageEnIO1.TWainParams.AppManufacturer:="Hyrix";
ImageEnIO1.TWainParams.AppProductFamily:="Image processing";
ImageEnIO1.TWainParams.AppProductName:="ImageEn demo";
FillBack;
end;
// Select scanner
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ImageEnIO1.TWainParams.SelectedSource:=ComboBox1.ItemIndex;
FillBack;
end;
// negotiate parameters (verify that scanner supports Frame rectangle, Dpi...)
procedure TForm1.Button2Click(Sender: TObject);
begin
FillIn;
ImageEnIO1.TWainParams.Update; // verify here...
FillBack;
end;
// copy twain parameters to the controls
procedure TForm1.FillBack;
const
COLORS:array [0..2] of string=("Black&White","GrayScale","RGB");
var
i:integer;
begin
Edit1.Text:=FloatToStr( ImageEnIO1.TWainParams.YResolution.CurrentValue );
Edit2.Text:=FloatToStr( ImageEnIO1.TWainParams.XResolution.CurrentValue );
// Fill Colors (0=B/W 1=GrayScale 2=RGB) combobox
ComboBox2.Clear;
for i:=0 to ImageEnIO1.TWainParams.PixelType.Count-1 do
ComboBox2.Items.Add( COLORS[ ImageEnIO1.TWainParams.PixelType[i] ] );
ComboBox2.ItemIndex:=ImageEnIO1.TWainParams.PixelType.IndexOf(ImageEnIO1.TWainParams.PixelType.CurrentValue);
// frame
Edit3.Text:=FloatToStr(ImageEnIO1.TWainParams.AcquireFrameLeft);
Edit4.Text:=FloatToStr(ImageEnIO1.TWainParams.AcquireFrameTop);
Edit5.Text:=FloatToStr(ImageEnIO1.TWainParams.AcquireFrameRight);
Edit6.Text:=FloatToStr(ImageEnIO1.TWainParams.AcquireFrameBottom);
end;
// copy controls values to twain parameters
procedure TForm1.FillIn;
begin
ImageEnIO1.TWainParams.VisibleDialog:=CheckBox1.Checked;
ImageEnIO1.TWainParams.ProgressIndicators:=CheckBox2.Checked;
ImageEnIO1.TWainParams.AcquireFrameLeft:=StrToFloat( Edit3.Text );
ImageEnIO1.TWainParams.AcquireFrameTop:=StrToFloat( Edit4.Text );
ImageEnIO1.TWainParams.AcquireFrameRight:=StrToFloat( Edit5.Text );
ImageEnIO1.TWainParams.AcquireFrameBottom:=StrToFloat( Edit6.Text );
ImageEnIO1.TWainParams.PixelType.CurrentValue:=ComboBox2.ItemIndex;
ImageEnIO1.TWainParams.YResolution.CurrentValue:=StrToInt( edit1.text);
ImageEnIO1.TWainParams.XResolution.CurrentValue:=StrToInt( edit2.text);
ImageEnIO1.TWainParams.BufferedTransfer:=CheckBox4.Checked;
end;
// Acquire
procedure TForm1.Button1Click(Sender: TObject);
begin
Bitmap.Width := 640 ;
Bitmap.Height := 480 ;
FillIn;
ImageEnIO1.Acquire;
ProgressBar1.Position:=0;
end;
// progress
procedure TForm1.ImageEnIO1Progress(Sender: TObject; per: Integer);
begin
ProgressBar1.Position:=per;
if CheckBox3.Checked then begin
ImageEnView1.Update;
application.processmessages;
end;
end;
// enable/disable acquire frame
procedure TForm1.CheckBox5Click(Sender: TObject);
begin
edit3.enabled:=CheckBox5.Checked;
edit4.enabled:=CheckBox5.Checked;
edit5.enabled:=CheckBox5.Checked;
edit6.enabled:=CheckBox5.Checked;
ImageEnIO1.TWainParams.AcquireFrameEnabled:=CheckBox5.Checked;
ImageEnIO1.TWainParams.Update;
FillBack;
end;
Так вот почему, когда я из своей программы вызываю показ этого окна, оно появляется, вот только никаких действий не выполняет, постоянно ошибки вылетают, хотя в проекте(программе) все работает нормально (все что на форме), а как вызваю то появляются ошибки
function ShowMyDialog: Boolean; stdcall; external "twain.DLL";
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMyDialog);
end;
Почему?
← →
clickmaker © (2004-03-12 13:41) [1]в длл
function ShowMyDialog: Boolean; stdcall;
← →
Alx2 © (2004-03-12 13:43) [2]Код не читал. Только секцию uses посмотрел. Попробуй поставить на первое место в uses модуль ShareMem. Причем hostе - в головной модуль.
← →
Alx2 © (2004-03-12 13:45) [3]>clickmaker © (12.03.04 13:41)
Точно. Спецификаторы разные. :)
← →
ChcngerMan (2004-03-12 13:58) [4]Все сделал как сказали :)
Все равно ошибка(когда форма появляется)
тут:
procedure TForm1.FormActivate(Sender: TObject);
var
i:integer;
begin
// fills TWain sources
for i:=0 to ImageEnIO1.TWainParams.SourceCount-1 do
ComboBox1.Items.Add( ImageEnIO1.TWainParams.SourceName[i] );
// Select first scanner
ComboBox1.ItemIndex:=0;
ImageEnIO1.TWainParams.SelectedSource:=ComboBox1.ItemIndex;
ImageEnIO1.TWainParams.AppVersionInfo:="1.0";
ImageEnIO1.TWainParams.AppManufacturer:="Hyrix";
ImageEnIO1.TWainParams.AppProductFamily:="Image processing";
ImageEnIO1.TWainParams.AppProductName:="ImageEn demo";
FillBack;
end;
Из-за чго может быть?
← →
evvcom (2004-03-12 14:03) [5]То что соглашения о вызовах разные - это в данном случае замечание, но на ошибку никак не влияет, т.к. функция эта без параметров. В данном случае stdcall и fastcall идентичны.
А трассировать свою dll пробовал? И что дает?
← →
Alx2 © (2004-03-12 14:07) [6]А что за ошибка?
← →
ChcngerMan (2004-03-12 14:10) [7]"Access violation ..." :(
← →
ChcngerMan (2004-03-12 14:11) [8]Еще пишет при закрытии: Invalid pointer operation
← →
Alx2 © (2004-03-12 14:20) [9]Кажется, нужно сделать где-то один раз Application.Initialize. Но, если не нужно раздельных экземпляров Application, лучше передавать его из приложения-хоста как параметр.
← →
Alx2 © (2004-03-12 14:38) [10]Сейчас проверил в простейшем случае. У меня работает без ошибок.
Есть вопросы: глобальная переменная BitMap где инициализируется? Или до procedure TForm1.Button1Click(Sender: TObject) дело пока не доходит?
← →
ChcngerMan (2004-03-12 21:29) [11]До нее пока дело не дошло :)
Какие еще есть вариянты?
:(
← →
ChcngerMan (2004-03-12 21:45) [12]Еще прикол в том, что весь код формы прекрасно работает, когда является просто формой программы, а как в Дллку ее запихал, появились такие вот ошибки
← →
Defunct © (2004-03-13 00:42) [13]Попробуйте:
Form1 := TForm1.Create(Nil);
← →
ChcngerMan (2004-03-13 12:10) [14]Все равно глючит :(
А нужно самому вручную создавать свои объекты (точней компоненты), или можно просто на форму поставить???
Че то никак не пойму почему не работает :(
← →
ChcngerMan (2004-03-13 19:38) [15].
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c