unit uconfrelPrestacaoContas; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.UITypes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.DBCtrls, Vcl.ComCtrls, Data.DB, Vcl.ExtCtrls, ZAbstractRODataset, ZDataset, ZAbstractDataset, Vcl.Menus; type TconfrelPrestacaoContas = class(TForm) dtsBeneficiarios: TDataSource; gb_data: TGroupBox; Label1: TLabel; dtp_inicio: TDateTimePicker; dtp_fim: TDateTimePicker; gb_beneficiario: TGroupBox; dblucb_beneficiario: TDBLookupComboBox; btn_viewreport: TButton; rg_tipo: TRadioGroup; ZReadOnlyQuery1: TZReadOnlyQuery; dtsFiltro: TDataSource; qryFiltro: TZQuery; btn_imprimir: TButton; ppm_marca: TPopupMenu; IncluirTodos1: TMenuItem; N1: TMenuItem; DesmarcarTodos1: TMenuItem; ZReadOnlyQuery2: TZReadOnlyQuery; pg_tipo: TPageControl; tbRel: TTabSheet; lv_prestacao: TListView; tbQuebra: TTabSheet; lv_multi: TListView; PopupMenu1: TPopupMenu; ImprimirLista1: TMenuItem; zroqryVerificador: TZReadOnlyQuery; procedure btn_viewreportClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure btn_imprimirClick(Sender: TObject); procedure IncluirTodos1Click(Sender: TObject); procedure DesmarcarTodos1Click(Sender: TObject); procedure ImprimirLista1Click(Sender: TObject); procedure dtsBeneficiariosDataChange(Sender: TObject; Field: TField); private id_emp: integer; procedure WMMoving(var Msg: TWMMoving); message WM_MOVING; { Private declarations } public str_titulos: string; { Public declarations } end; var confrelPrestacaoContas: TconfrelPrestacaoContas; meses: array [1 .. 12] of string = ( 'JANEIRO', 'FEVEREIRO', 'MARCO', 'ABRIL', 'MAIO', 'JUNHO', 'JULHO', 'AGOSTO', 'SETEMBRO', 'OUTUBRO', 'NOVEMBRO', 'DEZEMBRO' ); implementation {$R *.dfm} uses udtmSystem, urelPrestacaoContas, urelRelacaoAcordo, urelMulti; // prestação de contas procedure TconfrelPrestacaoContas.btn_viewreportClick(Sender: TObject); begin with dtmSystem do begin // mes1 := inttostr(strtoint(copy(FormatDateTime('yyyy-mm-dd', // dtp_inicio.Date), 6, 2))); // mes2 := inttostr(strtoint(copy(FormatDateTime('yyyy-mm-dd', // dtp_fim.Date), 6, 2))); // ano1 := copy(FormatDateTime('yyyy-mm-dd', dtp_inicio.Date), 1, 4); // ano2 := copy(FormatDateTime('yyyy-mm-dd', dtp_fim.Date), 1, 4); // // tblEmpresaRepasse.Filtered := False; // tblEmpresaRepasse.Filter := '(((ID_MES >= ' + mes1 + ') or (ID_MES <= ' + // mes2 + ')) and ((ID_ANO >= ' + ano1 + ') or (ID_ANO <= ' + ano2 + ')))'; // tblEmpresaRepasse.Filtered := True; // // if tblEmpresaRepasse.IsEmpty then // begin // MessageDlg('Por favor monte um modelo de repasse para a empresa ' + // tblCHGEmpresaTX_NOME.AsString + // ' antes de realizar um relatório de Prestação de contas no período escolhido.', // mtWarning, [mbOK], 0); // Close; // Abort; // end; if not tblAcordos.Active then begin tblAcordos.Open; end; end; Screen.Cursor := crHourGlass; if rg_tipo.ItemIndex = -1 then begin rg_tipo.ItemIndex := 0; end; lv_prestacao.Clear; with qryFiltro.SQL do begin Clear; Add('select distinct'); Add('A.tx_nome,'); Add('B.tx_produto,'); Add('B.dt_vencimento,'); Add('B.dt_pagamento,'); Add('B.vl_titulo,'); Add('B.vl_juros,'); Add('B.vl_multa,'); Add('B.vl_encargos,'); Add('B.vl_corrigido,'); Add('B.vl_desc_principal,'); Add('B.id_titulo,'); Add('AC.id_original'); // Add('(cast(B.dt_pagamento as date)- cast(B.dt_vencimento as date)) as atraso'); Add('from chg_titulos B'); Add('left join chg_devedores A on (A.id_devedor = B.id_devedor)'); Add('left join sys_acordos AC on (AC.id_original = B.id_titulo)'); Add('where (B.tp_situacao = ' + QuotedStr('QC') + ' or B.tp_situacao = ' + QuotedStr('B') + ') and'); Add('B.tp_motivo <> ' + QuotedStr('Q') + ' and'); Add('B.id_empresa = ' + inttostr(dblucb_beneficiario.KeyValue) + ' and'); if rg_tipo.ItemIndex = 0 then begin Add('CAST(B.dt_pagamento AS DATE) >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_inicio.Date)) + ' and'); Add('CAST(B.dt_pagamento AS DATE) <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_fim.Date))); Add('and B.dt_emissao_recibo is NULL'); end; if rg_tipo.ItemIndex = 1 then begin Add('CAST(B.dt_emissao_recibo AS DATE) >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_inicio.Date)) + ' and'); Add('CAST(B.dt_emissao_recibo AS DATE) <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_fim.Date))); end; Add('and (AC.id_original is NULL'); Add('or AC.id_parcela in (select id_titulo from chg_titulos where id_empresa = 220))'); Add('order by A.tx_nome'); end; qryFiltro.Open; if not qryFiltro.IsEmpty then begin qryFiltro.First; while not qryFiltro.Eof do begin // if not dtmSystem.tblAcordos.Locate('ID_ORIGINAL', // qryFiltro.FieldByName('id_titulo').AsString, []) then // begin // with lv_prestacao.Items.Add do // begin // SubItems.Add(qryFiltro.FieldByName('tx_nome').AsString); // SubItems.Add(qryFiltro.FieldByName('tx_produto').AsString); // SubItems.Add(qryFiltro.FieldByName('dt_vencimento').AsString); // SubItems.Add(qryFiltro.FieldByName('dt_pagamento').AsString); // SubItems.Add(qryFiltro.FieldByName('vl_titulo').AsString); // end; // end // else // begin // dtmSystem.tblTitulos.Locate('ID_TITULO', // dtmSystem.tblAcordosID_PARCELA.AsString, []); // if dtmSystem.tblTitulosID_EMPRESA.AsSingle = 220 then // begin // with lv_prestacao.Items.Add do // begin // SubItems.Add(qryFiltro.FieldByName('tx_nome').AsString); // SubItems.Add(qryFiltro.FieldByName('tx_produto').AsString); // SubItems.Add(qryFiltro.FieldByName('dt_vencimento').AsString); // SubItems.Add(qryFiltro.FieldByName('dt_pagamento').AsString); // SubItems.Add(qryFiltro.FieldByName('vl_titulo').AsString); // end; // end; // end; with lv_prestacao.Items.Add do begin SubItems.Add(qryFiltro.FieldByName('tx_nome').AsString); SubItems.Add(qryFiltro.FieldByName('tx_produto').AsString); SubItems.Add(qryFiltro.FieldByName('dt_vencimento').AsString); SubItems.Add(qryFiltro.FieldByName('dt_pagamento').AsString); SubItems.Add(qryFiltro.FieldByName('vl_titulo').AsString); end; qryFiltro.Next; end; lv_prestacao.Column[0].Alignment := taCenter; end; ZReadOnlyQuery2.SQL.Clear; with ZReadOnlyQuery2.SQL do begin Add('select distinct'); Add('A.tx_nome,'); Add('B.tx_produto,'); Add('B.dt_vencimento,'); Add('B.dt_pagamento,'); Add('B.vl_titulo,'); Add('B.vl_juros,'); Add('B.vl_multa,'); Add('B.vl_encargos,'); Add('B.vl_corrigido,'); Add('B.vl_desc_principal,'); Add('B.id_titulo,'); Add('AC.id_original'); // Add('(cast(B.dt_pagamento as date)- cast(B.dt_vencimento as date)) as atraso'); Add('from chg_titulos B'); Add('left join chg_devedores A on (A.id_devedor = B.id_devedor)'); Add('left join sys_acordos AC on (AC.id_original = B.id_titulo)'); Add('where (B.tp_situacao = ' + QuotedStr('QC') + ' or B.tp_situacao = ' + QuotedStr('B') + ') and'); Add('B.tp_motivo = ' + QuotedStr('Q') + ' and'); Add('B.id_empresa = ' + inttostr(dblucb_beneficiario.KeyValue) + ' and'); if rg_tipo.ItemIndex = 0 then begin Add('CAST(B.dt_pagamento AS DATE) >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_inicio.Date)) + ' and'); Add('CAST(B.dt_pagamento AS DATE) <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_fim.Date))); Add('and B.dt_emissao_recibo is NULL'); end; if rg_tipo.ItemIndex = 1 then begin Add('CAST(B.dt_emissao_recibo AS DATE) >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_inicio.Date)) + ' and'); Add('CAST(B.dt_emissao_recibo AS DATE) <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd', dtp_fim.Date))); end; Add('and (AC.id_original is NULL'); Add('or AC.id_parcela in (select id_titulo from chg_titulos where id_empresa = 220))'); Add('order by A.tx_nome'); end; ZReadOnlyQuery2.Open; if ZReadOnlyQuery2.RecordCount > 0 then begin MessageDlg ('Há títulos com múltiplas formas de pagamento neste intervalo de prestação de contas.' + ' Por favor gere uma prestação manual também.', mtInformation, [mbOK], 0); end; lv_multi.Clear; if not ZReadOnlyQuery2.IsEmpty then begin ZReadOnlyQuery2.First; while not ZReadOnlyQuery2.Eof do begin with lv_multi.Items.Add do begin Caption := ZReadOnlyQuery2.FieldByName('tx_nome').AsString; SubItems.Add(ZReadOnlyQuery2.FieldByName('tx_produto').AsString); SubItems.Add(ZReadOnlyQuery2.FieldByName('dt_vencimento').AsString); SubItems.Add(ZReadOnlyQuery2.FieldByName('dt_pagamento').AsString); SubItems.Add(ZReadOnlyQuery2.FieldByName('vl_titulo').AsString); end; ZReadOnlyQuery2.Next; end; end; Screen.Cursor := crDefault; pg_tipo.ActivePageIndex := 0; btn_imprimir.Enabled := true; // Close; end; procedure TconfrelPrestacaoContas.DesmarcarTodos1Click(Sender: TObject); var i: integer; begin if lv_prestacao.Items.Count > 0 then begin for i := 0 to lv_prestacao.Items.Count - 1 do begin lv_prestacao.Items.Item[i].Checked := False; end; end; end; procedure TconfrelPrestacaoContas.dtsBeneficiariosDataChange(Sender: TObject; Field: TField); begin if id_emp <> dtsBeneficiarios.DataSet.FieldByName('ID_EMPRESA').AsInteger then begin id_emp := dtsBeneficiarios.DataSet.FieldByName('ID_EMPRESA').AsInteger; btn_imprimir.Enabled := false; lv_prestacao.Items.Clear; lv_multi.Items.Clear; end; end; procedure TconfrelPrestacaoContas.btn_imprimirClick(Sender: TObject); var str_ids: string; i, qtde_mes, counter: integer; Checked: Boolean; id_emp: integer; d1, d2, d3, d4: TDate; Dh1, M1, Y1: Word; Dh2, M2, Y2: Word; faltando: Boolean; begin Screen.Cursor := crHourGlass; id_emp := dblucb_beneficiario.KeyValue; if rg_tipo.ItemIndex = -1 then begin rg_tipo.ItemIndex := 0; end; str_titulos := ''; Checked := False; if lv_prestacao.Items.Count > 0 then begin for i := 0 to lv_prestacao.Items.Count - 1 do begin if lv_prestacao.Items.Item[i].Checked then begin qryFiltro.RecNo := i + 1; str_titulos := str_titulos + qryFiltro.FieldByName('id_titulo') .AsString + ','; Checked := True; end; end; end; setlength(str_titulos, length(str_titulos) - 1); if Checked then begin zroqryVerificador.SQL.Text := 'select dt_pagamento from chg_titulos where id_titulo in(' + str_titulos + ') order by dt_pagamento'; zroqryVerificador.Open; with dtmSystem do begin tblCHGEmpresa.Locate('ID_EMPRESA', id_emp, []); zroqryVerificador.First; d1 := zroqryVerificador.FieldByName('dt_pagamento').AsDateTime; DecodeDate(d1, Y1, M1, Dh1); d3 := StrToDate('01/' + inttostr(M1) + '/' + inttostr(Y1)); zroqryVerificador.Last; d2 := zroqryVerificador.FieldByName('dt_pagamento').AsDateTime; DecodeDate(d2, Y2, M2, Dh2); d4 := StrToDate('01/' + inttostr(M2) + '/' + inttostr(Y2)); qtde_mes := MonthsBetween(d3, d4) + 1; counter := 0; tblEmpresaRepasse.Filtered := False; tblEmpresaRepasse.Filter := '(ID_ANO >= ' + inttostr(Y1) + ' and ID_ANO <= ' + inttostr(Y2) + ')'; tblEmpresaRepasse.Filtered := True; faltando := tblEmpresaRepasse.Locate('ID_ANO;ID_MES', VarArrayOf([Y1, M1]), []); if faltando = False then begin MessageDlg('A empresa ' + tblCHGEmpresaTX_NOME.AsString + ' não possui modelos de repasse para todos os mêses dentro do período do pagamento mais antigo e o mais novo.' + ' Por favor crie os modelos de repasses que faltam antes de realizar esta operação (Entre ' + meses[M1] + ' de ' + inttostr(Y1) + ' e ' + meses[M2] + ' de ' + inttostr(Y2) + '.', mtWarning, [mbOK], 0); Close; Abort; end else begin while tblEmpresaRepasseID_MES.AsInteger <> M2 do begin if tblEmpresaRepasse.Eof then begin break; end; if tblEmpresaRepasseID_ANO.AsInteger > Y2 then begin break; end; if tblEmpresaRepasseID_ANO.AsInteger = Y2 then begin if tblEmpresaRepasseID_MES.AsInteger > M2 then begin break; end; end; Inc(counter, 1); tblEmpresaRepasse.Next; end; if tblEmpresaRepasseID_MES.AsInteger = M2 then begin Inc(counter, 1); end; end; if counter < qtde_mes then begin MessageDlg('A empresa ' + tblCHGEmpresaTX_NOME.AsString + ' não possui modelos de repasse para todos os meses dentro do período do pagamento mais antigo e o mais novo.' + ' Por favor crie os modelos de repasses que faltam antes de realizar esta operação (Entre ' + meses[M1] + ' de ' + inttostr(Y1) + ' e ' + meses[M2] + ' de ' + inttostr(Y2) + '.', mtWarning, [mbOK], 0); Close; Abort; end; end; relPrestacaoContas := TrelPrestacaoContas.Create(self); with relPrestacaoContas.zqryTitulos.SQL do begin Clear; Add('select'); Add('A.tx_nome,'); Add('A.id_devedor,'); Add('B.tx_produto,'); Add('B.dt_vencimento,'); Add('B.dt_pagamento,'); // Add('B.vl_titulo,'); Add('case when b.id_titulo in (select id_parcela from sys_acordos) then (b.vl_corrigido - b.vl_juros - b.vl_multa - b.vl_encargos)'); Add('when b.id_titulo not in (select id_parcela from sys_acordos) then (b.vl_titulo)'); Add('end as vl_titulo,'); Add('B.vl_desc_principal,'); Add('B.vl_repasse_prin,'); Add('B.vl_juros,'); Add('B.vl_desc_juros,'); Add('B.vl_repasse_juros,'); Add('B.vl_multa,'); Add('B.vl_desc_multa,'); Add('B.vl_repasse_multa,'); Add('B.vl_encargos,'); Add('B.vl_indicador,'); Add('B.vl_desc_indicador,'); Add('B.vl_repasse_encargos,'); Add('B.vl_corrigido,'); Add('B.vl_repasse_corrigido,'); Add('B.id_titulo,'); Add('B.id_empresa,'); Add('B.tp_prestacao,'); Add('(cast(B.dt_pagamento as date)- cast(B.dt_vencimento as date)) as atraso'); Add('from chg_devedores A'); Add('inner join chg_titulos B on (A.id_devedor = B.id_devedor)'); Add('where (B.id_titulo in (' + str_titulos + '))'); Add('order by A.tx_nome'); end; with relPrestacaoContas do begin dtmSystem.tblEmpresa.Locate('ID_EMPRESA', id_emp, []); frlbl_headertop.Caption := UpperCase(dtmSystem.tblEmpresaTX_TITULO.AsString + ' - CNPJ: ' + dtmSystem.tblEmpresaTX_CNPJ.AsString); RLMemo1.Lines[0] := StringReplace(RLMemo1.Lines[0], 'BENEF', UpperCase(dtmSystem.tblCHGEmpresaTX_NOME.AsString), [rfReplaceAll, rfIgnoreCase]); RLMemo1.Lines[0] := StringReplace(RLMemo1.Lines[0], 'DT1', FormatDateTime('dd/mm/yyyy', dtp_inicio.Date), [rfReplaceAll, rfIgnoreCase]); RLMemo1.Lines[0] := StringReplace(RLMemo1.Lines[0], 'DT2', FormatDateTime('dd/mm/yyyy', dtp_fim.Date), [rfReplaceAll, rfIgnoreCase]); zqryTitulos.Open; frPrestacao.PreviewModal; zqryTitulos.Close; end; relRelacaoAcordo := TrelRelacaoAcordo.Create(self); with relRelacaoAcordo do begin rel_acordo := false; with zroqryAcordos.SQL do begin Clear; Add('select distinct'); Add('A.tx_nome,'); Add('B.tx_produto,'); Add('B.dt_vencimento,'); Add('B.id_titulo,'); Add('B.vl_titulo,'); Add('B.qtde_parcelas,'); Add('C.id_acordo'); Add('from chg_devedores A'); Add('inner join chg_titulos B on (A.id_devedor = B.id_devedor)'); Add('inner join sys_acordos C on (A.id_devedor = C.id_devedor)'); Add('where (B.id_titulo in (' + str_titulos + '))'); // Add('and B.id_titulo in'); // Add('(select id_parcela from sys_acordos)'); Add('and (C.id_parcela in'); Add('(' + str_titulos + '))'); Add('order by A.tx_nome'); end; zroqryAcordos.Open; zroqryAcordos.First; str_ids := ''; while not zroqryAcordos.Eof do begin str_ids := str_ids + zroqryAcordos.FieldByName('ID_ACORDO') .AsString + ','; zroqryAcordos.Next; end; setlength(str_ids, length(str_ids) - 1); if length(str_ids) > 0 then begin with zroqry1.SQL do begin Clear; Add('select distinct A.id_acordo, B.tx_nome from sys_acordos A'); Add('left join chg_devedores B on (A.id_devedor = B.id_devedor)'); Add('where id_acordo in (' + str_ids + ')'); Add('order by B.tx_nome'); end; with zroqry2.SQL do begin Clear; Add('select distinct A.id_acordo, A.id_original, B.tx_produto, B.dt_vencimento, B.vl_titulo, count(a.id_acordo) from sys_acordos A'); Add('left join chg_titulos B on (A.id_original = B.id_titulo)'); Add('where id_acordo in (' + str_ids + ')'); Add('group by A.id_acordo, A.id_original, B.tx_produto, B.dt_vencimento, B.vl_titulo'); end; with zroqry3.SQL do begin Clear; Add('select distinct A.id_acordo, A.id_parcela, B.tx_produto, B.dt_vencimento, B.vl_titulo, count(a.id_acordo) from sys_acordos A'); Add('left join chg_titulos B on (A.id_parcela = B.id_titulo)'); Add('where id_acordo in (' + str_ids + ')'); Add('group by A.id_acordo, A.id_parcela, B.tx_produto, B.dt_vencimento, B.vl_titulo'); end; dtmSystem.tblEmpresa.Locate('ID_EMPRESA', id_emp, []); RLMemo1.Lines[0] := StringReplace(RLMemo1.Lines[0], 'BENEF', UpperCase(dtmSystem.tblCHGEmpresaTX_NOME.AsString), [rfReplaceAll, rfIgnoreCase]); RLMemo1.Lines[0] := StringReplace(RLMemo1.Lines[0], 'DT1', FormatDateTime('dd/mm/yyyy', dtp_inicio.Date), [rfReplaceAll, rfIgnoreCase]); RLMemo1.Lines[0] := StringReplace(RLMemo1.Lines[0], 'DT2', FormatDateTime('dd/mm/yyyy', dtp_fim.Date), [rfReplaceAll, rfIgnoreCase]); zroqry1.Open; zroqry2.Open; zroqry3.Open; frrelRelacaoAcordo.PreviewModal; zroqryAcordos.Close; zroqry1.Close; zroqry2.Close; zroqry3.Close; end; end; if rg_tipo.ItemIndex = 0 then begin with ZReadOnlyQuery1.SQL do begin Clear; Add('select'); Add('A.tx_nome,'); Add('B.tx_produto,'); Add('B.dt_vencimento,'); Add('B.dt_pagamento,'); Add('B.vl_titulo,'); Add('B.vl_juros,'); Add('B.vl_multa,'); Add('B.vl_encargos,'); Add('B.vl_corrigido,'); Add('B.vl_desc_principal'); Add('from chg_devedores A'); Add('inner join chg_titulos B on (A.id_devedor = B.id_devedor)'); Add('where B.id_titulo in (' + str_titulos + ')'); Add('and B.dt_emissao_recibo <> B.dt_pagamento'); Add('order by A.tx_nome'); end; ZReadOnlyQuery1.Open; if ZReadOnlyQuery1.RecordCount > 0 then begin MessageDlg ('Existem recebimentos nesse período que possuem data de cálculo diferente da data de emissão do recibo.' + ' É recomendando fazer uma prestação de contas utilizando a data da emissão do recibo também.', mtWarning, [mbOK], 0); end; end; end; Screen.Cursor := crDefault; // Close; end; procedure TconfrelPrestacaoContas.FormClose(Sender: TObject; var Action: TCloseAction); begin dtmSystem.tblEmpresaRepasse.Filtered := False; qryFiltro.Close; ZReadOnlyQuery1.Close; Action := caFree; confrelPrestacaoContas := nil; end; procedure TconfrelPrestacaoContas.FormCreate(Sender: TObject); begin dtp_inicio.Date := Date; dtp_fim.Date := Date; if not dtmSystem.tblCHGEmpresa.Active then begin dtmSystem.tblCHGEmpresa.Open; end; id_emp := dtmSystem.tblCHGEmpresaID_EMPRESA.AsInteger; if not dtmSystem.tblEmpresaRepasse.Active then begin dtmSystem.tblEmpresaRepasse.Open; end; if not dtmSystem.tblEmpresa.Active then begin dtmSystem.tblEmpresa.Open; end; dblucb_beneficiario.KeyValue := 1; pg_tipo.ActivePageIndex := 0; end; procedure TconfrelPrestacaoContas.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then begin Key := 0; Close; end; end; procedure TconfrelPrestacaoContas.ImprimirLista1Click(Sender: TObject); begin relMulti := TrelMulti.Create(self); with relMulti do begin dtsRel.DataSet := ZReadOnlyQuery2; rldbtxt1.DataField := 'tx_nome'; rldbtxt2.DataField := 'tx_produto'; rldbtxt3.DataField := 'vl_titulo'; rldbtxt4.DataField := 'dt_vencimento'; RLReport1.PreviewModal; end; end; procedure TconfrelPrestacaoContas.IncluirTodos1Click(Sender: TObject); var i: integer; begin if lv_prestacao.Items.Count > 0 then begin for i := 0 to lv_prestacao.Items.Count - 1 do begin lv_prestacao.Items.Item[i].Checked := True; end; end; end; procedure TconfrelPrestacaoContas.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.