unit ufrmMemoBox; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.UITypes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstMaster, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.DBCtrls, rDBComponents, Data.DB; type TfrmMemoBox = class(TmstMaster) dbmb_obs: TDBMemo; lbl_tfonte: TLabel; up_fonte: TUpDown; edt_fonte: TEdit; cb_negrito: TCheckBox; dtsHistorico: TDataSource; procedure FormCreate(Sender: TObject); procedure up_fonteClick(Sender: TObject; Button: TUDBtnType); procedure cb_negritoClick(Sender: TObject); procedure edt_fonteEnter(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure dtsHistoricoStateChange(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private procedure WMMoving(var Msg: TWMMoving); message WM_MOVING; { Private declarations } public chamou_esc : boolean; { Public declarations } end; var frmMemoBox: TfrmMemoBox; implementation {$R *.dfm} uses udtmSystem; procedure TfrmMemoBox.cb_negritoClick(Sender: TObject); begin if cb_negrito.Checked then begin dbmb_obs.Font.Style := dbmb_obs.Font.Style + [fsBold]; // toggle do negrito end else begin dbmb_obs.Font.Style := dbmb_obs.Font.Style - [fsBold]; end; end; procedure TfrmMemoBox.dtsHistoricoStateChange(Sender: TObject); begin dbmb_obs.ReadOnly := not(dtsHistorico.State in [dsEdit, dsInsert]); end; procedure TfrmMemoBox.edt_fonteEnter(Sender: TObject); begin if StrToInt(edt_fonte.text) < 8 then // min e max do tamanho da fonte begin text := '8'; dbmb_obs.Font.Size := 8; end; if StrToInt(edt_fonte.text) > 72 then begin text := '72'; dbmb_obs.Font.Size := 72; end; end; procedure TfrmMemoBox.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; if (dtsHistorico.State in [dsInsert,dsEdit]) and (chamou_esc = false) then begin dtsHistorico.DataSet.FieldByName('TL_MEMO').AsString := dbmb_obs.Lines.Text; end; end; procedure TfrmMemoBox.FormCreate(Sender: TObject); begin edt_fonte.text := inttostr(dbmb_obs.Font.Size); chamou_esc := false; end; procedure TfrmMemoBox.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then begin Key := 0; chamou_esc := true; Close; end; end; procedure TfrmMemoBox.up_fonteClick(Sender: TObject; Button: TUDBtnType); begin dbmb_obs.Font.Size := StrToInt(edt_fonte.text); end; procedure TfrmMemoBox.WMMoving(var Msg: TWMMoving); var workArea: TRect; begin workArea := Screen.WorkareaRect; with Msg.DragRect^ do begin if left < workArea.left then OffsetRect(Msg.DragRect^, workArea.left - left, 0); if top < workArea.top then OffsetRect(Msg.DragRect^, 0, workArea.top - top); if Right > workArea.Right then OffsetRect(Msg.DragRect^, workArea.Right - Right, 0); if Bottom > workArea.Bottom then OffsetRect(Msg.DragRect^, 0, workArea.Bottom - Bottom); end; end; end.