segunda-feira, 27 de agosto de 2012

Quebra textos e retorna frases do tamanho especificado


Quebra textos e cria frases do tamanho especificado, com um detalhe (não reparte as palavras) a função avalia se a palavra seguinte vai caber na frase caso contrario inclui na frase seguinte.

Fiz essa função na necessidade de atender regras de tamanho em comentarios de nota fiscal.

Function QuebraTextString(Texto : String; Largura : Integer):TStringList;
var
  Original, Quebrado : TStringList;
  i, x, esp : integer;
  frase : String;
begin
  Original := TStringList.Create;
  Quebrado := TStringList.Create;

  esp := Largura;
  sBreakApart(Texto, ' ', Original);

  frase := '';
  for i := 0 to Original.Count-1 do begin
    if Length(frase) = esp then begin
      Quebrado.Add(frase);
      frase := '';
    end;
    if( Length(frase + ' ' +Original.Strings[i]) > esp) then begin
      Quebrado.Add(frase);
      frase := '';
    end;
    frase := frase + ' '+Original.Strings[i];
    if i = Original.Count-1 then begin
      Quebrado.Add(frase);
    end;
  end;
  result:= Quebrado;
end;

Desabilitar/Habilitar componentes de um form pela sua classe.


Segue procedure que permite habilitar/desabilitar componentes de determinado form de acordo com as classes passadas como parâmetro. É possível determinar quais controles não serão afetados.

procedure EnableDisableControls(Form: TForm; ClassComponents: array of TControlClass; Exclude: array of TControl; State: Boolean);
var
  i,
  j,
  z: Integer;
begin
  for I := 0 to Form.ComponentCount -1 do
    for j := Low(ClassComponents) to High(ClassComponents) do
      if High(Exclude) > -1 then
      begin
      for z := Low(Exclude) to High(Exclude) do
        if (Form.Components[i] is ClassComponents[j]) and (Form.Components[i] <> Exclude[z]) then (Form.Components[i] as ClassComponents[j]).Enabled := State;
      end
      else
        if (Form.Components[i] is ClassComponents[j]) then (Form.Components[i] as ClassComponents[j]).Enabled := State;
end;

Exemplo de uso:

EnableDisableControls(Form1, [TEdit, TMemo, TCheckBox, TRadioButton], [CheckBox1], (not Edit2.Enabled));

Neste exemplo acima todos os edits, memos, checkboxes e radiobuttons serão desabilitados/habilitados, com exceção do checkbox1.

Pesquisa SQL de datas amarzenadas em Varchar


Olá Pessoal no meu banco de dado as datas estão gravadas em varhar, estava com dificuldades p/ manipular, em pesquisa pela net adaptei algumas coisas e deu certo.
Ai vai uma parte do codigo fonte.

procedure Tfrm_media_vendas.Label13Click(Sender: TObject);

begin
//=============== calcula total de vendas no mes de janeiro====================
frm_media_vendas.query1.Close;
frm_media_vendas.query1.sql.clear;
frm_media_vendas.query1.sql.add('select SUM(VL_TOT_ORC) from orcamentos');
frm_media_vendas.query1.sql.add ('where DT_ORC like "%01/'+(Edit2.Text)+'"');
frm_media_vendas.query1.sql.add ('ORDER by CD_ORC');
frm_media_vendas.query1.Open;
frm_media_vendas.DBGrid1.Refresh;
frm_media_vendas.Label13.Caption:=IntToStr(Query1.RecordCount);
frm_media_vendas.MaskEdit1.Text:='R$'+ floatTostr(frm_media_vendas.DBGrid1.SelectedField.AsCurrency);
//=====================fim do calculo==================================
//===================Total Orçamentos Janeiro=========================
frm_media_vendas.query1.Close;
frm_media_vendas.query1.sql.clear;
frm_media_vendas.query1.sql.add('select * from orcamentos');
frm_media_vendas.query1.sql.add ('where DT_ORC like "%01/'+(Edit2.Text)+'"');
frm_media_vendas.query1.sql.add ('ORDER by CD_ORC');
frm_media_vendas.query1.Open;
frm_media_vendas.DBGrid1.Refresh;
frm_media_vendas.Label13.Caption:=IntToStr(Query1.RecordCount);
//=========================fim da pesquisa===================
end;