terça-feira, 13 de outubro de 2020

Operation not supported on selected printer

No Delphi7 usando o Fast Report 2.5 quando envia um relatório para a impressora, as vezes,  no Windows 10 e 2012 apresenta a mensagem 

Operation not supported on selected printer.

Para resolver esse problema, antes de fazer um frReport.ShowReport faça o seguinte:

var

  dev,

  driv,

  port: array[0..80] of Char;

  deviceMode: THandle;

begin

  Printer.GetPrinter(dev, driv, port, deviceMode);

  Printer.SetPrinter(dev, driv, port, 0);

  frPreview1.Print;

end;


ps: Adicionar a unit printers no uses da interface.


Solução encontrada no site: https://stackoverflow.com/questions/435144/operation-not-supported-and-printer-selected-is-not-valid-errors-while-print


segunda-feira, 7 de setembro de 2020

 

SetFocus no Firemonkey Delphi.


O Firemonkey do Delphi proíbe a mudança de foco em alguns eventos. Para conseguir contornar a situação do SetFocus dos campos, precisamos mandar um mensagem atrasada para o form.

Como mandar esta mensagem. Simples vamos usar uma Thread Anonima. Pois é depois de muita procura achei um paliativo.

Vamos a Função:

procedure TfrmTelaPadrao.ForceFocus(Obj: TControl);
begin
  TThread.CreateAnonymousThread(
    procedure
    begin
      TThread.Synchronize( nil,
         procedure
         begin
           Obj.SetFocus;
         end
      );
    end
  ).Start;
end;

Espero que tenha ajudado a quem procura.

Origem: https://valedodelphi.blogspot.com/2018/11/setfocus-no-firemonkey-delphi.html

segunda-feira, 15 de junho de 2020

criar nova instancia do delphi limpa


Criar um atalho e na linha do comando colocar
C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\bds.exe"

Depois do executavel do BDS digite -R e nome da nova instancia

ex:
C:\Program Files (x86)\Embarcadero\Studio\20.0\bin\bds.exe"  -R web

quarta-feira, 27 de maio de 2020

Excelente PDF com varias dicas interessantes
Delphi x Firebird

terça-feira, 26 de maio de 2020

ListView Infinito

procedure TForm2.ListView1ScrollViewChange(Sender: TObject);
var
  R: TRectF;
  LItem: TListViewItem;
  I: Integer;

begin
  if TListView(Sender).ItemCount > 0 then // Just in case...
  begin
    // Get the last item's Rect
    R := TListView(Sender).GetItemRect(TListView(Sender).ItemCount - 1);
    // Bottom?
    if R.Bottom = TListView(Sender).Height then
    begin
      Caption := 'Reached bottom!';
      for I := 21 to 40 do
      begin
        LItem := ListView1.Items.Add;
        LItem.Text := IntToStr(I);
      end;

    end
    else
      Caption := 'Bottom not reached yet.';
  end;

end;

segunda-feira, 11 de maio de 2020

Mudar cor da barra de seleção DBGrid

Essa Rotina muda a Cor da Barra de Seleção de uma DBGRID.
Aqui tb está sendo alterado a Cor da Font. (Copiado do site Planeta Delphi) 

procedure TForm1.DBGrid1DrawDataCell(Sender: TObjectconst Rect: TRect; Field: TField; State: TGridDrawState);
begin
   if gdSelected in State then    // verifica se está selecionada
      DBGrid1.Canvas.Brush.Color := clYellow;  // muda a cor
                                                                // da barra

   // Muda a Cor da Fonte
   if Table1.FieldByName('Vip_Status').AsString = 'VIP'  then
      DBGrid1.Canvas.Font.Color := clRed
   else
      DBGrid1.Canvas.Font.Color := clBlack;

      DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;

Colocar menu popup ao lado do button

var
vPonto : TPoint;
begin
   vPonto := Button1.ClientToScreen(Point(0, Button1.Height));
    PopUpMenu1.Popup(vPonto.X, vPonto.Y);

quinta-feira, 30 de abril de 2020

Enter como TAB no Delphi Firemonkey

Usar os seguintes comandos no onKeyDown do formulario
if Key = vkReturn then
 begin
 Key := vkTab;
 KeyDown(Key, KeyChar, Shift);
 end;

sábado, 11 de abril de 2020

Instanciar Formulário Delphi

https://marcosalles.wordpress.com/2013/09/14/classe-generica-para-instanciar-dinamicamente/

segunda-feira, 6 de abril de 2020

Rotina para obter versão do Firebird


GBAK -Z -Y VERSAO.TXT

No arquivo VERSAO.TXT vai mostrar a versão do FIREBIRD

sábado, 4 de abril de 2020

WINEXE não funciona DELPHI XE

O WinExec não funciona no DelphiXe, acredito que seja por causa do unicode.

A solucao encontrada foi usar o ShellExecute da seguinte forma.


Interface
    uses ShellApi...;





Procedure Executar;
Var
NomeArquivoExecutar : String;
begin
 NomeArquivoExecutar := 'CALC.EXE';
  ShellExecute(Application.Handle, 'open', pchar(NomeArquivoExecutar), nil, nil, SW_HIDE);


end;