sábado, 25 de julho de 2015

quarta-feira, 8 de abril de 2015

[Delphi] Criar checkbox (TDBGrid - TColumnTitle)





Caros, a pedido do meu amigo kylderi apliquei um checkbox no header de uma coluna do TDBGrid, então criei uma unit para tal tarefa, veja aqui.
 

terça-feira, 31 de março de 2015

Criar checkbox em header (cxGrid - DevExpress)






Caros, hoje precisei colocar um checkbox no header de uma coluna da cxGrid, então criei uma unit para tal tarefa, segue código;

//Jucelio Moura, j03071986@gmail.com

unit uCxGridTools;

interface

uses System.SysUtils, System.Classes, Vcl.Graphics, Json,
     cxGridDBTableView, Data.DB, System.Math, cxCheckBox;

type
  TImageCollun = class
  private
    FSizeStr: Int64;
    FImageStr: string;
    function GetImageStr: TBitmap;
    function StrToBitmap: TBitmap;
  public
    constructor Create(const ASize: Int64; AImageStr: string);
  published
    property Image: TBitmap read GetImageStr;
  end;

  THelperTcxGridDBColumn = class helper for TcxGridDBColumn
  private
    procedure TableViewFlagHeaderClick(Sender: TObject);
    procedure ChangesBoolValue(const AValue: Boolean);
    function GetImage(const AValue: Boolean): TBitmap;
    procedure SetSettings;
  public
    procedure ChangesBool(const AValue: Boolean = False);
  end;

implementation

{ TImageCollun }
constructor TImageCollun.Create(const ASize: Int64; AImageStr: string);
begin
  FSizeStr:= ASize;
  FImageStr:= AImageStr;
end;

function TImageCollun.GetImageStr: TBitmap;
begin
  Result:= StrToBitmap;
end;

function TImageCollun.StrToBitmap: TBitmap;
var
  loArqStream: TStringStream;
  loFileString: String;
  loFileSize, loi: Integer;
  loArrayStringsFile: TStringList;
  loFileBytes: Tbytes;
begin
  try
    try
      loFileString := FImageStr;
      loFileSize := FSizeStr;
      loArrayStringsFile := TStringList.Create;
      ExtractStrings([','], [' '], PChar(loFileString),
      loArrayStringsFile);
      SetLength(loFileBytes, loFileSize);
      for loi := 0 to Pred(loFileSize) do
        loFileBytes[loi] := StrToInt(loArrayStringsFile[loi]);
      loArqStream := TStringStream.Create(loFileBytes);
      Result:= TBitmap.Create;
      Result.LoadFromStream(loArqStream);
    finally
      loArqStream.Free;
      loArrayStringsFile.Free;
    end;
  except
    FreeAndNil(Result);
    raise;
  end;
end;

{ THelperTcxGridDBColumn }

procedure THelperTcxGridDBColumn.ChangesBool(const AValue: Boolean = False);
begin
  OnHeaderClick:= TableViewFlagHeaderClick;
  HeaderGlyph:= GetImage(AValue);
  SetSettings;
  Tag:= IfThen(AValue, 1, 0);
end;

procedure THelperTcxGridDBColumn.ChangesBoolValue(const AValue: Boolean);
var
  loBook: TBookmark;
begin
  with TcxGridDBTableView(Self.GridView).DataController.DataSource.DataSet do
  begin
   loBook:= Bookmark;
   DisableControls;
   try
     First;
     while not Eof do
     begin
       Edit;
       FieldByName(Self.DataBinding.FieldName).AsBoolean:= AValue;
       Post;
       Next;
     end;
   finally
     if BookmarkValid(loBook) then
       GotoBookmark(loBook);
     EnableControls;
   end;
  end;
end;

function THelperTcxGridDBColumn.GetImage(const AValue: Boolean): TBitmap;
var
  loImageCollun: TImageCollun;
  loImgStr: string;
  loSize: Int64;
begin
  case AValue of
    True: begin
            loSize:= 822;
            loImgStr:= '66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 3, 0, 0, 196, 14, 0, '+
                       '0, 196, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 254, 254, 254, 191, 191, 191, 167, 167, 167, 167, 167, 167, 167, '+
                       '167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, '+
                       '191, 191, 191, 254, 254, 254, 255, 255, 255, 254, 254, 254, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '+
                       '0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 254, 254, 254, 191, 191, 191, 0, 0, 0, 200, 200, 200, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 200, 200, 200, 0, 0, 0, 191, 191, 191, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 247, 247, 247, 229, 229, 229, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 243, 243, 243, 60, 60, 60, 1, 1, 1, 157, 157, 157, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 251, 251, 251, 60, 60, 60, '+
                       '23, 23, 23, 107, 107, 107, 1, 1, 1, 157, 157, 157, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, '+
                       '167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 244, 244, 244, 74, 74, 74, 212, 212, 212, 255, '+
                       '255, 255, 127, 127, 127, 1, 1, 1, 157, 157, 157, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, '+
                       '167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 127, 127, 127, 1, 1, 1, 242, 242, 242, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, '+
                       '167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 225, 225, 225, 253, 253, 253, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, '+
                       '167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, '+
                       '167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 191, 191, '+
                       '191, 0, 0, 0, 200, 200, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                       '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 200, 200, 200, 0, 0, 0, 191, 191, 191, 254, 254, '+
                       '254, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, '+
                       '53, 254, 254, 254, 255, 255, 255, 254, 254, 254, 191, 191, 191, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, '+
                       '167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 191, 191, 191, '+
                       '254, 254, 254, 255, 255, 255';
          end;
    False: begin
             loSize:= 822;
             loImgStr:= '66, 77, 54, 3, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0, 40, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 3, 0, 0, 196, 14, 0, '+
                        '0, 196, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 254, 254, 254, 191, 191, 191, 167, 167, 167, 167, 167, 167, 167, '+
                        '167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, '+
                        '191, 191, 191, 254, 254, 254, 255, 255, 255, 254, 254, 254, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '+
                        '0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 53, 53, 254, 254, 254, 191, 191, 191, 0, 0, 0, 200, 200, 200, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 200, 200, 200, 0, 0, 0, 191, 191, 191, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '0, 0, 0, 167, 167, 167, 167, 167, 167, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, '+
                        '0, 167, 167, 167, 191, 191, 191, 0, 0, 0, 200, 200, 200, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, '+
                        '255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 200, 200, 200, 0, 0, 0, '+
                        '191, 191, 191, 254, 254, 254, 53, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '+
                        '0, 0, 0, 0, 0, 0, 53, 53, 53, 254, 254, 254, 255, 255, 255, 254, 254, 254, 191, 191, 191, 167, 167, 167, 167, 167, 167, '+
                        '167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, '+
                        '167, 191, 191, 191, 254, 254, 254, 255, 255, 255';
           end;
  end;
  loImageCollun:= TImageCollun.Create(loSize, loImgStr);
  try
    Result:= loImageCollun.GetImageStr;
  finally
    loImageCollun.Free;
  end;
end;

procedure THelperTcxGridDBColumn.SetSettings;
begin
  HeaderGlyphAlignmentHorz:= taCenter;
  with Options do
  begin
    FilteringPopup:= False;
    Sorting:= False;
  end;
  PropertiesClassName:= 'TcxCheckBoxProperties';
  with TcxCheckBoxProperties(Properties) do
  begin
    ImmediatePost:= True;
  end;
end;

procedure THelperTcxGridDBColumn.TableViewFlagHeaderClick(Sender: TObject);
begin
  TcxGridDBColumn(Sender).HeaderGlyph:= nil;
  case TcxGridDBColumn(Sender).tag of
    0: begin
         TcxGridDBColumn(Sender).Tag:= 1;
         TcxGridDBColumn(Sender).HeaderGlyph:= GetImage(True);
         ChangesBoolValue(True);
       end;
    1: begin
         TcxGridDBColumn(Sender).Tag:= 0;
         TcxGridDBColumn(Sender).HeaderGlyph:= GetImage(false);
         ChangesBoolValue(False);
       end;
  end;
end;


end.

- Implementação;

cxGridDBTableView.GetColumnByFieldName('SeuFieldBoolean').ChangesBool();

segunda-feira, 22 de dezembro de 2014

hacknfortes

Inscrições em Janeiro de 2015!


Anonymous Methods + Class Helper Delphi + Métodos de Class


Caros, mostrarei como otimizar a chamada dos seus formulários utilizando (Anonymous Methods + Class Helper Delphi + Métodos de Class);

- Crie uma unit, na seção type adicione;

  TMetodo = reference to procedure(Form: TForm);

  TFormsHelper = class helper for TForm
    class function ShowF(Metodo: TMetodo): TModalResult;
  end;
 
- Implementação;

class function TFormsHelper.ShowF(Metodo: TMetodo): TModalResult;
var
  loForm: TForm;
begin
  Result:= mrNone;
  loForm:= Self.Create(Application);
  with loForm do
  begin
    try
      if Assigned(Metodo) then
        Metodo(loForm);
      ShowModal;
    finally
      Result:= ModalResult;
      Free;
    end;
  end;
end;

- Para utilizar o método basta adicionar a unit ao seu form
- Exemplo;

procedure TMain.Button1Click(Sender: TObject);
begin
  if TMeuForm.ShowF(procedure(Form: TForm)
                  begin
                    with TMeuForm(Form) do
                    begin
                      //Suas implementações, exemplo abaixo
                      //Edit1.Text:= 'Develop 001';
                      //Edit2.Text:= 'Develop 002';
                      //Edit3.Text:= 'Develop 003';
                    end;
                  end) = mrOk then ShowMessage('Salvou')
  else ShowMessage('Cancelou');
end;

sábado, 20 de dezembro de 2014

Anonymous Methods + Class Helper Delphi



Caros, uma união perfeita, que pode melhorar e simplificar bastante nossa vida no desenvolvimento de aplicações utilizando Delphi, mostrarei um exemplo pratico utilizando a classe TDataSet;

- Crie uma unit, na seção type adicione;

  TMetodoDataSet = reference to procedure(Table: TDataSet);

  TDataSetHelper = class helper for TDataSet
    procedure Eoff(Metodo: TMetodoDataSet);
  end;

- Implementação;

{ TDataSetHelper }

  procedure TDataSetHelper.Eoff(Metodo: TMetodoDataSet);
  begin
    DisableControls;
    try
      First;
      while not Eof do
      begin
        Metodo(Self);
        Next;
      end;
    finally
      EnableControls;
    end;
  end;

- Para utilizar o método basta adicionar a unit ao seu form
- Exemplo;

  with FDMemTable1 do
  begin
    with FieldDefs do
    begin
      Add('cod', ftInteger);
      Add('nome', ftString, 20);
    end;
    CreateDataSet;
    AppendRecord([1, 'Develop 001']);
    AppendRecord([2, 'Develop 002']);
    AppendRecord([3, 'Develop 003']);
    AppendRecord([4, 'Develop 004']);
  end;

- Exemplo:

  FDMemTable1.eoff(procedure(Table: TDataSet)
                   begin
                     ShowMessage(Table.FieldByName('nome').AsString)
                   end)