![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
закрытие fsMDIChild формы
gentos © (2007-08-16 15:31:00)ув. мастера создаю и вызываю ее следующим образом
TScanDocForm.Create(self).Show;
хочу закрыть ее при нажатиии на кнопку, пишу следующее :
procedure TScanDocForm.BtnEndClick(Sender: TObject);
begin
ScanDocForm.Free; -- ?
end;
выледает еррор апликатион, вообщем абракадабра типа аксес виолатион и т.д.
gentos (2007-08-16 15:52:00) [21]
> Сергей М. © (16.08.07 15:49) [8]
вот наплодил , помоему норм код все работает не хватает всего лишь кнопочки !
gentos (2007-08-16 15:51:00) [22]
unit PravadostupaScanDoc;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg, ImgList, ComCtrls, ToolWin, PravadostupaImageForm, Oracle, PTreeview;
type
TScanDocForm = class(TForm)
PnlBtn: TPanel;
btnSelectScan: TButton;
btnGoScan: TButton;
BtnNextDoc: TButton;
BtnEnd: TButton;
ScanImage: TImage;
ToolBar1: TToolBar;
tbView: TToolButton;
ImageList1: TImageList;
PnlScan: TPanel;
PnlLeftSide: TPanel;
SplitterLeft: TSplitter;
PnlRightSide: TPanel;
SplitterRight: TSplitter;
btnSavePageOfDoc: TButton;
PanelImage: TPanel;
img: TImage;
Delete_Temporary: TOracleQuery;
Create_Temporary: TOracleQuery;
ToolButton1: TToolButton;
SvDlg: TSaveDialog;
PnlTop: TPanel;
SplitterTop: TSplitter;
PnlBottom: TPanel;
SplitterBottom: TSplitter;
tmr: TTimer;
procedure btnSelectScanClick(Sender: TObject);
procedure btnGoScanClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BtnShowClick(Sender: TObject);
procedure tbViewClick(Sender: TObject);
procedure BtnNextDocClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnSavePageOfDocClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BtnEndClick(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure tmrTimer(Sender: TObject);
private
{ Private declarations }
procedure LobCreateTemporary(var LOB: TLobLocator);
procedure LobFreeTemporary(var LOB: TLobLocator);
procedure BtnEnabled(bool1:boolean; bool2:boolean; bool3:boolean; bool4:boolean; bool5:boolean);
public
{ Public declarations }
PTreeview: TPTreeview;
procedure MyMsg(var Msg: TMsg; var Handled: Boolean);
procedure GetIdDocumentBody(id : integer);
end;
var
ScanDocForm: TScanDocForm;
frm : TfrmImage;
idDocumentBody : integer;
lvlDocumentBody : integer;
implementation
uses PravadostupaLoadfiles, pravadostupaDM, Scanners, Twain ;
{$R *.dfm}
procedure TScanDocForm.LobCreateTemporary(var LOB: TLobLocator);
begin
LOB := TLOBLocator.Create(DM.DB,otBLOB);
Create_Temporary.SetComplexVariable('VARBLOB', LOB);
Create_Temporary.Execute;
end;
procedure TScanDocForm.LobFreeTemporary(var LOB: TLobLocator);
begin
Delete_Temporary.SetComplexVariable('VARBLOB', LOB);
Delete_Temporary.Execute;
end;
procedure TScanDocForm.btnSelectScanClick(Sender: TObject);
begin
TWSelectDS;
BtnEnabled(false,true,false,false,false);
end;
procedure TScanDocForm.MyMsg(var Msg: TMsg; var Handled: Boolean);
begin
Handled := ProcessSourceMessage(Msg);
end;
procedure TScanDocForm.btnGoScanClick(Sender: TObject);
begin
TWAcquire(Application.Handle, ScanImage.Picture.Bitmap, True);
BtnEnabled(false,false,false,false,false);
end;
procedure TScanDocForm.FormCreate(Sender: TObject);
begin
Application.OnMessage := MyMsg;
TWOpenDSM(Application.Handle);
lvlDocumentBody := 0;
end;
procedure TScanDocForm.FormDestroy(Sender: TObject);
begin
if TWIsDSEnabled then
TWDisableDS;
if TWIsDSOpen then
TWCloseDS;
if TWIsDSMOpen then
TWCloseDSM;
end;
procedure TScanDocForm.BtnShowClick(Sender: TObject);
var
Bit : TBitmap;
MStream: TMemoryStream;
begin
MStream:=TMemoryStream.Create;
Bit := TBitmap.Create;
ScanImage.Picture.Bitmap.SaveToStream(MStream);
MStream.Position:=0;
Bit.LoadFromStream(MStream);
img.Picture.Assign(Bit);
MStream.Free;
Bit.Free;
end;
procedure TScanDocForm.tbViewClick(Sender: TObject);
var
MStream: TMemoryStream;
begin
frm := TfrmImage.Create(Self);
MStream:=TMemoryStream.Create;
ScanImage.Picture.Bitmap.SaveToStream(MStream);
MStream.Position:=0;
frm.drawstream(MStream);
MStream.Free;
frm.ShowModal;
end;
procedure TScanDocForm.BtnNextDocClick(Sender: TObject);
begin
BtnEnabled(false,false,true,true,true);
ScanImage.Picture.Bitmap := nil;
img.Picture.Bitmap := nil;
tmr.Interval := 4000;
TWAcquire(Application.Handle, ScanImage.Picture.Bitmap, True);
end;
procedure TScanDocForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TScanDocForm.btnSavePageOfDocClick(Sender: TObject);
var
LOB: TLobLocator;
Mstream: TMemoryStream;
lvl : integer;
Jpg: TJPEGImage;
begin
BtnEnabled(false,false,true,false,true);
Inc(lvlDocumentBody);
LobCreateTemporary(LOB); // cr temp
Jpg:=TJPEGImage.Create;
Mstream:=TMemoryStream.Create;
Jpg.Assign(ScanImage.Picture.Bitmap);
jpg.SaveToStream(Mstream);
Mstream.Position :=0;
LOB.CopyFrom(Mstream,Mstream.Size);
lvl := PTreeview.SelLvlFromWdsdocumentsbody;
if lvlDocumentBody=1 then
PTreeview.INSINTOWDSDocumentsBody(idDocumentBody,lvlDocumentBody,LOB)
else
PTreeview.INSINTOWDSDocumentsBody(idDocumentBody,lvl,LOB);
LobFreeTemporary(LOB);
Mstream.Free;
jpg.Free;
end;
procedure TScanDocForm.GetIdDocumentBody(id : integer);
begin
idDocumentBody := id;
end;
procedure TScanDocForm.FormShow(Sender: TObject);
begin
BtnEnabled(true,false,false,false,true);
PTreeview := TPTreeview.Create(Self);
PTreeview.Session := DM.DB;
PTreeview.Cursor := crSQLWait;
end;
procedure TScanDocForm.BtnEndClick(Sender: TObject);
begin
PTreeview.Free;
ScanDocForm.Close;
end;
procedure TScanDocForm.ToolButton1Click(Sender: TObject);
var
Jpg: TJPEGImage;
begin
if SvDlg.Execute then begin
Jpg:=TJPEGImage.Create;
Jpg.Assign(ScanImage.Picture.Bitmap);
jpg.SaveToFile(SvDlg.FileName);
jpg.Free;
end;
end;
procedure TScanDocForm.tmrTimer(Sender: TObject);
var
Mstream: TMemoryStream;
Bit : TBitmap;
begin
Mstream:=TMemoryStream.Create;
ScanImage.Picture.Bitmap.SaveToStream(Mstream);
if Mstream.Size > 100 then begin
BtnEnabled(false,false,true,true,true);
Bit := TBitmap.Create;
MStream.Position:=0;
Bit.LoadFromStream(MStream);
img.Picture.Assign(Bit);
MStream.Free;
Bit.Free;
tmr.Interval := 0;
end else
MStream.Free;
end;
procedure TScanDocForm.BtnEnabled(bool1:boolean; bool2:boolean; bool3:boolean; bool4:boolean; bool5:boolean);
begin
btnSelectScan.Enabled := bool1;
btnGoScan.Enabled := bool2;
BtnNextDoc.Enabled := bool3;
btnSavePageOfDoc.Enabled := bool4;
BtnEnd.Enabled := bool5;
end;
end.
gentos (2007-08-16 15:51:00) [23]Удалено модератором
Сергей М. (2007-08-16 15:49:00) [24]Удалено модератором
gentos (2007-08-16 15:47:00) [25]Удалено модератором
Сергей М. (2007-08-16 15:45:00) [26]Удалено модератором
Сергей М. (2007-08-16 15:44:00) [27]
> мне на кнопку надо
Ну надо так надо)
И ?
Что, в кнопкином обработчике написать строчку
Close;
вместо
Free;
выше твоего понимания ?)
gentos (2007-08-16 15:43:00) [28]
ScanDocForm.Close;
тоже еррор !
gentos (2007-08-16 15:41:00) [29]
procedure TScanDocForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
тут все ок , но мне на кнопку надо !!!
Сергей М. (2007-08-16 15:38:00) [30]
> хочу закрыть ее
Ну так и закрывай ее !
На то у формы есть соотв.метод Close (Закрыть)
Какого ж лешего ты для "закрытия" используешь метод Free("освободить") ?
gentos (2007-08-16 15:32:00) [31]да , забыл написать что должно быть между
procedure TScanDocForm.BtnEndClick(Sender: TObject);
begin
______________________
end;