Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий

Модерирует : ShIvADeSt

ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667
 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

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
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по компонентам для Delphi, C++ Builder разных версий
ShIvADeSt (26-06-2017 02:39): Продолжение тут
http://forum.ru-board.com/topic.cgi?forum=33&topic=14667


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru