Mostrando postagens com marcador Delphi. Mostrar todas as postagens
Mostrando postagens com marcador Delphi. Mostrar todas as postagens

Apostila sobre object pascal

Estava procurando uma apostila sobre Object Pascal e encontrei uma excelente.
É uma apostila do projeto Castle (framework para criação de jogos em Lazarus).
Link: https://castle-engine.io/modern_pascal_introduction.pdf

Links sobre Delphi

Geral
Freebyte's Guide to freeDelphi programming
Página em inglês com muito conteúdo sobre Delphi.
Ela é um índice para vários outros sites sobre Delphi.

Componentes
ZeosDB
Componente para conectar em bancos de dados. É open source e aceita vários bancos de dados.

Project JEDI
Vários componentes visuais e não visuais para Delphi.

Ferramentas
CnPack
É um plugin para a IDE do Delphi que adiciona várias funcionalidades, auxiliando na programação.
O CnPack possui alguns projetos além do plugin para a IDE, para fazer o download do plugin acesse: http://www.cnpack.org/showdetail.php?id=797&lang=en. No fim da página tem  o link de download.

Funções para trabalhar com strings no Delphi

Esou postando uma unit que achei no documento de 900 dicas para Delphi.
Essa unit possui várias funções para tratar strings:

Alternativas free para o Delphi

Atualmente conheço duas alternativas free para o Delphi.

Não conheço muita coisa sobre o CodeTyphon, mas pelo que li ele é uma distribuição do Lazarus.

Função em Delphi para converter minutos em horas formatada

Função para delphi que recebe um valor em segundos e retorna o valor em horas, minutos e segundos formatada.
Exemplo: se a função receber o valor 61, ela vai retornar o valor 00:01:01

function FormatSecsToHMS(Secs: LongInt): string;
 var
  Hrs, Min: Word;
  horas, minutos, segundos: string;
begin
 Hrs := Secs div 3600;
 Secs := Secs mod 3600;
 Min := Secs div 60;
 Secs := Secs mod 60;

 if Hrs = 0 then
    horas := '00'
 else
    horas := IntToStr(Hrs);

 if Min = 0 then
    minutos := '00'
 else
    if(Min < 10) then
   minutos := '0' + IntToStr(Min)
    else
   minutos := IntToStr(Min);

 if Secs = 0 then
    segundos := '00'
 else
    if(Secs < 10) then
    segundos := '0' + IntToStr(Secs)
    else
     segundos := IntToStr(Secs);

 Result := horas + ':' + minutos + ':' + segundos;
end; 


Principais propriedades dos componentes e seus significados - Delphi

Segue abaixo as propriedades mais comuns dos componentes no Delphi e seus significados.

Propriedade Significado
Align Determina como o componente será alinhado no seu container - [alNone, alTop, alBottom, alLeft, alRight, alClient]
Caption Legenda do componente (& indica a tecla de atalho)
Cursor Desenho que representa o cursor da mouse [crDefault, crNone, crArrow, crCross , crIBeam, crSize, crSizeNESW, crSizeNS, crSizeNWSE, crSizeWE, crUpArrow, crHourGlass, crDrag, crNoDrop, crHSplit, crVSplit, crMultiDrag, crSQLWait, crNo, crAppStart, crHelp, crHandPoint]
Name Nome da instância do componente
Left Distância em Pixel da borda esquerda do componente até a borda esquerda do FORM
Top Distância em pixel da borda superior do componente até a borda superior do FORM
Height Altura em pixel do componente
Width Largura em pixel do componente
ComponentCount O número de componentes possuídos por um componente container
Components Uma matriz de componentes possuídos por um componente container
Color Indica a cor de fundo do componente
Font Fonte utilizada no componente
Ctl3D Define a aparência 3D ou 2D de um componente
Enabled Define se o componente esta ou não ativo
Visible Define se o componente esta ou não visível
Hint String utilizada na exibição de dicas instantâneas
ShowHint Define se o hint será mostrado automaticamente
PopupMenu Menu que será acionado com o botão direito do mouse
TabOrder A ordem de tabulação do componente
TabStop Indica se o componente será ponto de parada para a tecla TAB
HelpContext Número utilizado para chamar o help on-line sensível ao contexto

Programa para instalar componentes no Delphi

O Delphipi é um programa que facilita em muito a instalação de componentes.

Para baixar ele acesse: http://www.mediafire.com/?8t6zphs7ev0krpo

Se você está com dúvida de como instalar componentes no Delphi  baixe esse programa que ele fará todo o trabalho para você.

Qualquer dúvida me avisem.

Conhecendo o CnPack

O CnPack é um plugin open-source para o Delphi que adiciona várias funcionalidades a sua IDE.

Eu o o utilizo já faz algum tempo e sempre que eu instalo o delphi a primeira coisa que instalo depois é o CnPack.

Ele funciona nas seguintes versões:
  • Delphi 5
  • Delphi 6
  • Delphi 7, 
  • C++Builder 5 e 6
  • BDS 2005 2006
  • RAD Studio 2007 2009 2010 2011
Em outro post vou detalhar mais suas funcionalidades, pois realmente são muitas, nesse vou falar apenas de uma que é o gerador de "message box". Através dele você gera a "message box" de forma visual, informando o texto que irá aparecer para o usuário, o ícone da caixa de diálogo, os tipos de respostas, etc. Facilita muito o processo de desenvolvimento. Segue abaixo uma imagem de como é a tela de criação de "message box" pelo CnPack.

Tela de criação de message box do CnPack

O site oficial do projeto é: http://www.cnpack.org/index.php?lang=en
O link direto para baixá-lo é: http://www.cnpack.org/download.php?id=417&lang=en

Delphi - Gerar miniatura de imagem

Função que gera a miniatura:
procedure CreateThumbnail(InStream, OutStream: TStream;
  Width, Height: integer; FillColor: TColor);
var
  JpegImage: TJpegImage;
  Bitmap: TBitmap;
  Ratio: double;
  ARect: TRect;
  AHeight, AHeightOffset: integer;
  AWidth, AWidthOffset: integer;
begin
  // Check for invalid parameters
  if Width < 1 then
    raise Exception.Create('Invalid Width');
  if Height < 1 then
    raise Exception.Create('Invalid Height');
  JpegImage := TJpegImage.Create;
  try
    // Load the image
    JpegImage.LoadFromStream(InStream);
    // Create bitmap, and calculate parameters
    Bitmap := TBitmap.Create;
    try
      Ratio := JpegImage.Width / JpegImage.Height;
      if Ratio > 1 then
      begin
        AHeight := Round(Width / Ratio);
        AHeightOffset := (Height - AHeight) div 2;
        AWidth := Width;
        AWidthOffset := 0;
      end
      else
      begin
        AWidth := Round(Height * Ratio);
        AWidthOffset := (Width - AWidth) div 2;
        AHeight := Height;
        AHeightOffset := 0;
      end;
      Bitmap.Width := Width;
      Bitmap.Height := Height;
      Bitmap.Canvas.Brush.Color := FillColor;
      Bitmap.Canvas.FillRect(Rect(0, 0, Width, Height));
      // StretchDraw original image
      ARect := Rect(AWidthOffset, AHeightOffset, AWidth + AWidthOffset,
        AHeight + AHeightOffset);
      Bitmap.Canvas.StretchDraw(ARect, JpegImage);
      // Assign back to the Jpeg, and save to the file
      JpegImage.Assign(Bitmap);
      JpegImage.SaveToStream(OutStream);
    finally
      Bitmap.Free;
    end;
  finally
    JpegImage.Free;
  end;
end;

Como usar:
procedure MakeThumbnail(const InFileName, OutFileName: string;
  Width, Height: integer; FillColor: TColor);
var
  InStream, OutStream: TFileStream;
begin
  InStream := TFileStream.Create(InFileName, fmOpenRead);
  try
    OutStream := TFileStream.Create(OutFileName, fmOpenWrite or fmCreate);
    try
      CreateThumbnail(InStream, OutStream, Width, Height, FillColor);
    finally
      OutStream.Free;
    end;
  finally
    InStream.Free;
  end;
end;

Delphi - Percorrer todos os componentes do formulário

Esta rotina serve apenas para ilustrar como devemos fazer para acessar todos os componentes de um formulário através de um "for".

var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do
    ShowMessage(Components[i].ClassName);
end;

Uma utilização para isso poderia ser a seguinte: mudar a cor de fundo de todos os Edits para amarelo.

Data por extenso no Delphi

Função que retorna uma string com a data por extenso com o dia da semana.

Definição de visibilidade no Delphi

Ao declarar uma variável, um objeto, uma procedure ou uma function no delphi você pode especificar qual será seu nível de visibilidade. Abaixo segue os quatro tipos possíveis:
  • private: Essas partes de seu objeto são acessíveis apenas para o código na mesma unidade que a implementação do seu objeto. Use esta diretiva para ocultar detalhes de implementação de seus objetos dos usuários e para impedi-los de modificar membros que possam afetar seu objeto.
  • protected: Os membros protected do seu objeto podem ser acessados por descendentes do seu objeto. Essa capacidade permite que você oculte os detalhes de implementação do seu objeto dos usuários ao mesmo tempo que fornece flexibilidade máxima para descendentes do objeto.
  • public: Esses campos e métodos são acessíveis de qualquer lugar do seu programa. Construtores e destruidores de objeto devem ser sempre public.
  • published: Runtime Type Information (RTTI) a ser gerada para a parte publicada de seus objetos permite que outras partes de sua aplicação obtenham informações sobre as partes publicadas do seu objeto. O Object Inspector usa a RTTI para construir sua lista de propriedades. Esse tipo de visibilidade é muito importante para quem for desenvolver componentes.
Exemplo:
TObjeto = class
private
  VariavelPrivate: Integer;
protected
  procedure ProcedureProtected;
public
  constructor ConstrutorPublic;
  destructor DestruidorPublic;
published
  property UmaPropriedade read VariavelPrivate write VariavelPrivate;
end;

Para que serve o overload no Delphi?

O overload nos permite escrever procedures ou functions com o mesmo nome desde que possuam quantidades de parâmetros ou tipos diferentes.
Por exemplo, todos os casos abaixo estão corretos:
procedure Teste(I: Integer); overload;
procedure Teste(S: string); overload;
procedure Teste(D: Double); overload;
procedure Teste(D: Double; S: string); overload;
Ao chamar a função Teste, o programa vai chamar a correta de acordo com os parâmetros passados.

Delphi - Como obter uma string entre outras duas

Essa função eu peguei arquivo "900 dicas de delphi - dtdelphi28", não lembro de onde baixei esse arquivo, mas é muito bom.

function Copy(Frase,Inicio,Fim:String):String;
{ função criada por Marcus Vitoratti }
var  
  iAux,kAux:Integer;
begin
 Result:='';
 if (Pos(Fim,Frase) <> 0) and (Pos(Inicio,Frase)<>0) then
  begin
    iAux:=Pos(Inicio,Frase)+length(Inicio);
    kAux:=Pos(Fim,Frase);
    Result:=Copy(Frase,iAux,kAux-iAux);
  end;
end;

Exemplo:
label1.caption:= Copy('==aa==Título da página+++aa','==aa==','+++aa');
//retornará a string 'Título da página'.

Delphi - Desabilitar (Ctrl+Alt+Del), (Alt+Tab) e (Ctrl+Esc)

Instrução para habilitar ou desabilitar as teclas (Ctrl+Alt+Del),(Alt+Tab), (Ctrl+Esc)

var
  OldValue : LongBool;
begin
  {liga a trava}
  SystemParametersInfo(97, Word(True), @OldValue, 0);

  {desliga a trava}
  SystemParametersInfo(97, Word(False), @OldValue, 0);
end;

Operadores lógicos - Delphi, C++ e VB

Essa tabela compara os operadores lógicos das linguagens Pascal (utilizada pelo Delphi) C/C++ e Visual Basic (VB).

Operador Pascal C/C++ Visual Basic
Atribuição := = =
Comparação = == = ou Is*
Não igual a <> != <>
Menor que < < <
Maior que > > >
Menor que ou igual a <= <= <=
Maior que ou igual a >= >= >=
E lógico and && And
Ou lógico or || Or
Não lógico not ! Not

Usando SQLite com o Delphi

O SQLite é um banco de dados free cuja a principal vantagem é que para ele funcionar não precisa de instalação, basicamente basta copiar a dll dele junto com a sua aplicação e começar a utilizá-lo.

No caso do Delphi ou Lazarus, para conectar no banco de dados eu utilizo o componente ZeosDB, para baixar acesse: https://sourceforge.net/projects/zeoslib/

O ZeosDB é um componente opensource que permite conectar, executar consultas, scripts em vários bancos de dados como MySQL, Oracle, etc...

Para conectar em um banco de dados sqlite com o ZeosDB basta colocar o componente TZConnection no form e depois setar as seguintes propriedades:

Database = coloque aqui o endereço do seu banco de dados, por exemplo: "c:\programa\banco.sqlite"
Protocol = selecione a opção "sqlite"
LibraryLocation = coloque a dll do sqlite na mesma pasta da sua aplicação e depois nesse campo coloque o nome da dll, por exemplo "sqlite.dll"

Para fazer o download da dll acesse: https://www.sqlite.org/download.html

Para criar e administrar o banco de dados eu utilizo a ferramenta Sqlite Expert Personal, para fazer o download acesse: http://www.sqliteexpert.com/download.html

Espero ter ajudado, qualquer dúvida postem nos comentários.


Listar todos os arquivos do diretório corrente

Esta função retorna todos os arquivos do diretório corrente em um objeto TStringList.

function FillDir(Const AMask: string): TStringList;
var
  SearchRec : TSearchRec;
  intControl : integer;
begin
  Result := TStringList.create;
  intControl := FindFirst( AMask, faAnyFile, SearchRec );
  if intControl = 0 then
  begin
    while (intControl = 0) do
    begin
      Result.Add( SearchRec.Name );
      intControl := FindNext( SearchRec );
    end;
    FindClose( SearchRec );
  end;
end;

Como usar:
Como parâmetro de entrada informe a máscara dos tipos de arquivos que deseja listar, por exemplo: para listar todos os arquivos .zip coloque como parâmetro de entrada: '*.zip'