Arvur
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Код: unit Frm_File; interface uses DB{TBlobField}, FIBDataSet{TFIBGuidField}, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, dxSkinsCore, dxSkinsDefaultPainters, dxSkinsdxBarPainter, ActnList, dxBar, cxClasses, StdActns, StdCtrls, OleCtnrs, FixOleContainerUnit, DBOleContainer, uDBImages; type TFrmFile = class(TFrame) BarManager: TdxBarManager; tbar_File: TdxBar; btn_File_Load: TdxBarButton; btn_File_Save: TdxBarButton; btn_File_Clear: TdxBarButton; btn_File_Print: TdxBarButton; dock_File: TdxBarDockControl; aLst_File: TActionList; act_File_Open: TFileOpen; act_File_Save: TFileSaveAs; act_File_Print: TAction; act_File_Clear: TAction; img_Desc: TpDBImage; scroll_Desc: TScrollBox; ole_Desc: TDBOleContainer; procedure EOnClick(Sender: TObject); procedure EOnUpdate(Action: TBasicAction; var Handled: Boolean); procedure EOnOLEActivate(Sender: TObject); procedure EOnOLEDeactivate(Sender: TObject); private FName: string; public constructor Create(AOwner: TComponent); override; procedure DoInit; end; implementation uses Dm_Design, Dm_August, TntLXUtils; const desc_Filters: array [0..1] of string = ('Документ Microsoft Word (*.doc)|*.doc', 'Изображение JPEG (*.jpg, *.jpeg)|*.jpg;*.jpeg'); desc_Exts : array [0..1] of string = ('doc', 'jpg'); desc_Hints : array [0..1] of string = ('документ', 'изображение'); {$R *.dfm} { TFrmFile } constructor TFrmFile.Create(AOwner: TComponent); begin inherited; FName := ''; end; procedure TFrmFile.DoInit; procedure PrepareActions; var Counter: Integer; tmpAct: TCustomAction; begin for Counter := 0 to Pred(aLst_File.ActionCount) do begin tmpAct := (aLst_File.Actions[Counter] as TCustomAction); tmpAct.Hint := Copy(tmpAct.Hint, 1, Pos(' ', tmpAct.Hint)) + desc_Hints[Self.Tag]; end; act_File_Open.Dialog.Filter := desc_Filters[Self.Tag]; act_File_Open.Dialog.DefaultExt := desc_Exts[Self.Tag]; act_File_Save.Dialog.Filter := desc_Filters[Self.Tag]; act_File_Save.Dialog.DefaultExt := desc_Exts[Self.Tag]; end; procedure ShowControl(AControl: TWinControl; FieldName: string; HideControl: TWinControl = nil); begin if Assigned(HideControl) then HideControl.Visible := False; AControl.Visible := True; AControl.Align := alClient; FName := FieldName; PrepareActions; end; begin if (Self.Tag <> 1) then Self.Tag := 0; case Self.Tag of 0: ShowControl(scroll_Desc, ole_Desc.DataField, img_Desc); 1: ShowControl(img_Desc, img_Desc.DataField, scroll_Desc); end; end; procedure TFrmFile.EOnClick(Sender: TObject); var fName: WideString; procedure DoSaveToFile; begin case Self.Tag of 0: ole_Desc.SaveAsDocument(fName); 1: TBlobField(DmAugust.tbl_Desc.FBN('Image')).SaveToFile(fName); end; end; begin if (Sender = ole_Desc) then begin ole_Desc.Run; // ole_Desc.OleObject.Protect(1); // запретить редактирование документа. ole_Desc.OleObject.Protect(2); // запретить редактирование и копирование. ole_Desc.DoVerb(ovShow); ole_Desc.Align := alClient; end; with DmAugust.tbl_Desc do begin if (Sender = act_File_Open) then begin if not IsEmpty then Edit else Append; case Self.Tag of 0: ole_Desc.CreateObjectFromFile(act_File_Open.Dialog.FileName, False); 1: TBlobField(FBN('Image')).LoadFromFile(act_File_Open.Dialog.FileName); end; Post; end; if (Sender = act_File_Save) then begin fName := act_File_Save.Dialog.FileName; DoSaveToFile; end; if (Sender = act_File_Print) then begin fName := GetTempFileWithExt('.' + desc_Exts[Self.Tag], WideGetTempPath, 'Aug'); DoSaveToFile; ShellPrintFileEx(Application.Handle, fName); end; if (Sender = act_File_Clear) then begin if (Self.Tag = 0) then ole_Desc.DestroyObject; Delete; end; end; end; procedure TFrmFile.EOnUpdate(Action: TBasicAction; var Handled: Boolean); begin with DmAugust.tbl_Desc do if (Action = act_File_Open) then act_File_Open.Enabled := Active and not ParamByName('ID').IsNull else TAction(Action).Enabled := Active and not FBN(FName).IsNull; Handled := True; end; procedure TFrmFile.EOnOLEActivate(Sender: TObject); var Idx, Len: Integer; Bar: string; begin try // Прячем Ribbon в Word 2007 ole_Desc.OleObject.ActiveWindow.ToggleRibbon; except end; try // Прячем Toolbar'ы в Word 2003 и ниже for Idx := 1 to ole_Desc.OleObject.CommandBars.Count do begin Bar := ole_Desc.OleObject.CommandBars[Idx].Name; Len := Length(Bar); if (Len > 0) and ole_Desc.OleObject.CommandBars[Bar].Visible then ole_Desc.OleObject.CommandBars[Bar].Visible := False; end; except end; end; procedure TFrmFile.EOnOLEDeactivate(Sender: TObject); begin ole_Desc.Align := alNone; end; end. |
| Всего записей: 2111 | Зарегистр. 18-01-2002 | Отправлено: 12:25 20-09-2011 | Исправлено: Arvur, 12:28 20-09-2011 |
|