Pular para o conteúdo principal

Postagens

Texto na Diagonal usando o Canvas (Delphi)

var   lf : TLogFont;   tf : TFont; begin   with Form1.Canvas do     begin       Font.Name := 'Arial';       Font.Size := 24;       tf := TFont.Create;       tf.Assign(Font);       GetObject(tf.Handle, sizeof(lf), @lf);        lf.lfEscapement := 450;       lf.lfOrientation := 450;       tf.Handle := CreateFontIndirect(lf);       Font.Assign(tf);       tf.Free;       TextOut(20, Height div 2, 'Texto Diagonal!');    end; end;

Iniciar e Parar Serviços do Windows (Delphi)

Em certas ocasiões nos deparamos com a necessidade de manipular determinadas atividades do SO, como iniciar ou parar um banco de dados, ou qualquer outro serviço que esteja funcionando no momento. Segue abaixo um código que encontrei na Internet para tal finalidade (não me recordo à fonte, assim que eu a encontrar colocarei). Iniciar Serviço: uses WinSvc; // // start service // // return TRUE if successful // // sMachine: //   machine name, ie: \SERVER //   empty = local machine // // sService //   service name, ie: Alerter // function ServiceStart(   sMachine,   sService : string ) : boolean; var   //   // service control   // manager handle   schm,   //   // service handle   schs   : SC_Handle;   //   // service status   ss     : TServiceStatus;   //   // temp char pointer   psTemp : PChar;   //   // check point   dwChkP : DWord; begin   ss.dwCurrentState := -1;   //

Log de exceções não tratadas (Delphi)

Nem sempre é possível tornar nossa aplicação imune a todos os erros, sempre existe aquele que apenas o usuário conseguirá simular e na maioria das vezes você estará bem longe dali. Para não ficar apenas com a explicação do usuário, que muitas vezes e confusa e inconclusiva podemos criar uma maneira de ao menos rastrear os erros não controlados, isso mesmo podemos construir um "log" de erros, então vamos lá: Adicione em seu formulário principal o componente ApplicationEvents da aba Additional; No evento OnException entre com o seguinte código: var   vl_NomeDoLog : string;   vl_Arquivo   : TextFile; begin   vl_NomeDoLog := ChangeFileExt(Application.Exename, '.log');   AssignFile(vl_Arquivo, vl_NomeDoLog);    IF FileExists(vl_NomeDoLog) THEN     Append(vl_arquivo) { se existir, apenas adiciona linhas }    ELSE     ReWrite(vl_arquivo); { cria um novo se não existir }    TRY     WriteLn(vl_arquivo, 'APLICAÇÃO: ['+Screen.ActiveForm.Caption+'] DATA/HORA: ['+D