Arquivo da categoria: Delphi

“Caret notation: ^” O que é isso?

Bom dia,

Hoje é 2 de outubro de 2016, dia de votação para prefeito e vereadores, daqui  a pouco irei votar, mas antes de sair quero falar sobre um assunto que chamou minha atenção nessa semana: a “Caret notation: ^”  (Notação com circunflexo ).

Devido a necessidade de imprimir em uma Impressora Bluetooth  sem driver, tive que voltar a estudar a velha tabela dos comandos ASCII e ESC/POS.  E  na tabela ASCII, encontrei uma notação diferente  “Caret notation” (Notação ^ )

Então   decidi escrever um pouco sobre a “Notação ^“.

Na tabela ASCII existem Os sinais não-imprimíveis, conhecidos como caracteres de controle que em editores de texto comuns não são visíveis, se eles não são visíveis como podemos escrever esses caracteres?

Resposta rápida, use a função chr() que converte um decimal  inteiro em um caractere ou agora simplesmente usa e a notação Notação ^  .

agora a explicação:

Notação ^, é uma representação para os caracteres de controle, não-imprimíveis, da codificação de caracteres ASCII. A representação consiste de um circunflexo (^) seguido de uma letra maiúscula; Este dígrafo tem por padrão a correspondência entre a ordem dos códigos ASCII, para caracteres de controle, e a ordem das letras no alfabeto. Por exemplo, o caractere EOT, cujo valor decimal é 4, é representado por ^D, haja visto que D é a quarta letra do alfabeto. O caractere NUL, cujo valor é 0, é representado por ^@ (pois, na tabela ASCII, o caractere @ precede A). O caractere DEL, cujo código é 127, é usualmente representado por ^?, pois o caractere ASCII ‘?’ vem antes de ‘@’ e -1, escrito como uma cadeia de 8 bits e ignorando-se o bit mais a esquerda, coincide com 127. wikipedia

Então, a “Notação ^”  é apenas uma lógica sequencia, onde na tabela ASCII é mapeanda a sequencia dos caracteres não imprimíveis com  a sequencia da primeira letra do alfabeto em letra maiúscula.

Veja como fica a tabela ASCII para os caracteres não-visíveis com a  “Notação ^

Abrev Dec Notação com circunflexo Nome
NUL 0 ^@ Nulo (inglês Null)
SOH 1 ^A Início de cabeçalho (inglês Start of Header)
STX 2 ^B Início de texto (inglês Start of Text)
ETX 3 ^C Fim de texto (inglês End of Text)
EOT 4 ^D Fim de transmissão (inglês End of Transmission)
ENQ 5 ^E Consulta; inquirição (inglês Enquiry)
ACK 6 ^F Confirmação (inglês Acknowledge)
BEL 7 ^G Campainha; sinal sonoro (inglês Bell)
BS 8 ^H Espaço atrás; retorno de 1 caractere (inglês Back-space)
HT 9 ^I Tabulação horizontal (inglês Horizontal Tabulation)
LF 10 ^J Alimentação de linha; mudança de linha; nova linha (inglês Line Feed)
VT 11 ^K Tabulação vertical (inglês Vertical Tabulation)
FF 12 ^L Alimentação de formulário (inglês Form Feed)
CR 13 ^M Retorno do carro; retorno ao início da linha (inglês Carriage Return)
SO 14 ^N Mover para fora; deslocamento para fora (inglês Shift Out)
SI 15 ^O Mover para dentro; deslocamento para dentro (inglês Shift In)
DLE 16 ^P escape do linque de dados; escape de conexão (inglês Data-Link Escape)
DC1 17 ^Q Controle de dispositivo 1 (inglês Device Control 1)
DC2 18 ^R Controle de dispositivo 2 (inglês Device Control 2)
DC3 19 ^S Controle de dispositivo 3 (inglês Device Control 3)
DC4 20 ^T Controle de dispositivo 4 (inglês Device Control 4)
NAK 21 ^U Confirmação negativa (inglês Negative-Acknowledge)
SYN 22 ^V Estado ocioso síncrono; espera síncrona (inglês Synchronous Idle)
ETB 23 ^W Bloco de fim de transmissão (inglês End of Transmission Block)
CAN 24 ^X Cancelar (inglês Cancel)
EM 25 ^Y Fim de mídia; fim do meio (inglês End of Medium)
SUB 26 ^Z Substituir (inglês Substitute)
ESC 27 ^[ Escapar (inglês Escape)
FS 28 ^\ Separador de arquivos (inglês File Separator)
GS 29 ^] Separador de grupos (inglês Group Separator)
RS 30 ^^ Separador de registros (inglês Record Separator)
US 31 ^_ Separador de unidades (inglês Unit Separator)
DEL 127 ^? Deletar (inglês Delete)

https://pt.wikipedia.org/wiki/ASCII

e agora como usa isso em Delphi?

Exemplo : Mostrando Chr() e ^ 
var
tab  : char;
crlf : string;
begin
// Show the use of Chr
tab := Chr(9);
crlf := Chr(13)+Chr(10);
ShowMessage(‘Hello’+tab+’World’);
ShowMessage(”);
ShowMessage(‘Hello’+crlf+’World’);
ShowMessage(”);

// Show the equivalent use of ^
tab := ^I;  // I = 9th capital of the alphabet
crlf := ^M^J;  // M = 13th, J = 10th letters
ShowMessage(‘Hello’+tab+’World’);
ShowMessage(”);
ShowMessage(‘Hello’+crlf+’World’);
end;

http://www.delphibasics.co.uk/RTL.asp?Name=Chr

Está ai, mais um detalhe que pode fazer a diferença no seu dia a dia.

Abraços e até a próxima!

TWebBrowser navegando com a versão 11 do IE.

Hoje vou compartilhar uma dica interessante:

Como fazer o componente TWebBrowser do Delphi usar a versão 11 do Internet Explorer

Introdução:
TWebBrowser prove acesso a funcionalidades do “Microsoft’s Shell Doc Object and Control Library” (SHDOCVW.DLL), ou seja é um componente para exibição de paginas hml.

Problema:
Essa dll por padrão usa a versão 4 ou 7 do Internet Explorer, mesmo que o usuário atualize o navegador para o o IE 11, ele continuará a usar essa configuração antiga.

Solução:
Configura o registro para usar a versão instalada do IE
no windows 10, abra o regedit e navegue para a chave:

jhneabnjngeiakje
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

Crie dentro de FEATURE_BROWSER_EMULATION uma nova chave REG_DWORD com o nome do executável que esta usando o TWebBroser.
no meu exemplo estou usando o internet explorer 11 então devo criar a chave com o nome onix.exe e valores hexadecimal 2af9 ou decimal 11001

miofpmpoadiapjep
para outras versões usar:

Value Description
11001 (0x2AF9 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
11000 (0x2AF8) IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.
10001 (0x2711) Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
10000 (0x02710) Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
9999 (0x270F) Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing todeclare a !DOCTYPE directive causes the page to load in Quirks.
9000 (0x2328) Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.

Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
8888 (0x22B8) Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directivecauses the page to load in Quirks.
8000 (0x1F40) Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8

Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
7000 (0x1B58) Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.

feche o registro e abra o sistema:

Abaixo como estava antes de mudar a configuração
Antes de mudar a configuração:

Abraços
Marcos Nielsen

Acessando os valores selecionados de um TCXGrid

Olá

hoje vamos um exemplo simples para recuperar os valores de células selecionadas e adicioná-las a um TMemo

GetColumnByFieldName(‘NomeDaColuna’).Index ->Pesquisa a coluna no grid e retorna o indice dessa coluna;
ViewData.DataController.GetSelectedCount -> retorna o total de linhas selecionadas
ViewData.DataController.GetSelectedRowIndex(I) -> retorna o indice da linha usando o indice da coluna selecionada
ViewData.Records[Row].Values[Indice_coluna] -> Posiciona a linha retorna o  valor da coluna;

procedure ValoreSelecionados();
var
  I : Integer;
  Selecionados: Integer;
  Row : Integer;
begin
  Memo1.Clear;
  Selecionados := tblDados.ViewData.DataController.GetSelectedCount;
  for I := 0 to Selecionados - 1 do
  begin
    Row := tblDados.ViewData.DataController.GetSelectedRowIndex(I);
    Memo1.Lines.Add(tblDados.ViewData.Records[Row].Values[tblDados.GetColumnByFieldName('Nome').Index]);
  end;
end;

Até

Trabalhando em modo desconectado com UniDAC

Modo desconectado é uma forma de se tralhar com banco de dados sem manter a conexão  FULL TIME aberta ou seja, a conexão é aberta somente no momento em quem uma transação é requerida e fechada imediatamente apos a transação ser concluída.

Em sistemas onde a aplicação é divida em 3 ou mais camadas, esse tipo de transação é muito utilizado, como em php, onde a conexão é aberta somente no momento da execução do script logo apos é encerrada e o servidor web é desconectado do banco de dados.

Quando trabalhamos com Delphi não temos esse conceito, pois a aplicação se mantem conectada durante toda o tempo em que o sistema persiste em memória, mantendo um conexão aberta para cada instancia da aplicação,

Quando se tem o numero necessário de licenças de banco de dados, isso não é problema, mas quando esse numero de licenças é limitado, e teremos mais clientes conectadas ao bando do que licenças adquiridas, trabalhar em modo desconectado se torna uma boa opção.

para usarmos esse processo com unidac devemos setar:

TCustomDAConnection.Close ou TCustomDAConnection.Disconnect
TCustomDAConnection.Options.DisconnectedMode para True.

pronto, agora as conexões são abertas e fechadas automaticamente, o que permite que o próximo usuário concorrente posa usar a mesma licença de banco de dados.

mas lembre-se que caso o sistema abra a conexão explicitamente com TCustomDAConnection.Open ou TCustomDAConnection.Connect

a conexão ficara aberta;
Mais informações podem ser lidas em:  http://www.devart.com/sdac/docs/index.html?work_disconnectmode.htm

Exportar um TcxDBPivotGrid para Excel

esse é curtinho:

add a Uses cxExportPivotGridLink, Winapi.ShellAPI;

crie a procedure:

procedure ExportarParaExcel()
begin
try
if dlgSalvar.Execute() then
begin

cxExportPivotGridToExcel(dlgSalvar.FileName, pivFluxo);

if Application(‘Deseja visualizar o arquivo’, ‘Exportação’, mbYesNo) = mryes then
begin
ShellExecute(Handle, ‘open’, pchar(dlgSalvar.FileName), nil, nil, SW_SHOW);
end;
end;
except
on E: Exception do
ShowMessage(‘Ocorreram erros na exportação: ‘ + sLineBreak + E.Message);
end;

End;

Exportar um TcxDBTreeList para Excel

Olá

Nesse post vou demonstrar como exportar registro de um grid para um arquivo do tipo .XLS

add a uses

cxTLExportLink, Winapi.ShellAPI;

crie a procedure:

procedure ExportarParaExcel()
begin
cxExportTLToExcel(‘grid.xls’, dbeBalancete, True, True, True);
ShellExecute(Handle, ‘open’, pchar(‘grid.xls’), nil, nil, SW_SHOW);
End;