unit ufrmMovUsuarios; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstMaster, Data.DB, Vcl.StdCtrls, Vcl.DBCtrls, Vcl.ComCtrls, System.UITypes, udtmSystem; type TfrmMovUsuarios = class(TmstMaster) dtsGrupos: TDataSource; lbl_text: TLabel; btn_ok: TButton; btn_cancel: TButton; ComboBox1: TComboBox; procedure btn_okClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private procedure WMMoving(var Msg: TWMMoving); message WM_MOVING; { Private declarations } public id_grupos: array of integer; { Public declarations } end; var frmMovUsuarios: TfrmMovUsuarios; implementation {$R *.dfm} uses ucadUsuarios; procedure TfrmMovUsuarios.btn_okClick(Sender: TObject); begin inherited; // verifica se já existe um usuário com esse nome. se sim năo deixa transferir if cadUsuarios.nome_grupmov = ComboBox1.Text then begin MessageDlg('O usuário já pertence a este grupo.', mtInformation, [mbok], 0); frmMovUsuarios.ModalResult := mrCancel; abort; end else begin cadUsuarios.id_grupomov := inttostr(id_grupos[ComboBox1.ItemIndex]); end; end; procedure TfrmMovUsuarios.FormClose(Sender: TObject; var Action: TCloseAction); begin inherited; // with dtmSystem do // begin // tblGrupos.close; // tblUsuarios.close; // qryConsulta.close; // end; end; procedure TfrmMovUsuarios.FormCreate(Sender: TObject); var i: integer; begin inherited; with dtmSystem do begin // tblGrupos.Open; // tblUsuarios.Open; // faz a consulta dos grupos pra preencher o combobox i := 0; qryConsulta.SQL.Text := 'Select * from SYS_GRUPOS ORDER BY TX_NOME'; qryConsulta.Open; setlength(id_grupos, qryConsulta.RecordCount); while not qryConsulta.Eof do begin ComboBox1.Items.Add(qryConsulta.FieldByName('tx_nome').AsString); id_grupos[i] := qryConsulta.FieldByName('id_grupo').AsInteger; inc(i); qryConsulta.Next; end; qryConsulta.close; ComboBox1.ItemIndex := tblUsuariosID_GRUPO.AsInteger - 1; end; end; procedure TfrmMovUsuarios.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.