quarta-feira, 24 de fevereiro de 2010

Notícias vindas da Unify

A Unify está no youtube e já com alguns vídeos já publicados.

Achei ótima idéia de utilizar este canal tão comum e popular para mostrar como andam as suas ferramentas.
O canal da Unify é http://www.youtube.com/UnifyCorp e já possui alguns vídeos bem legais.

Outra notícia boa é sobre os eventos da Unify na américa latina, em SP será no dia 15 de abril.
Para maiores detalhes contactar Triad Systems. http://www.triadsystems.com.br/

Recomendo que deem uma olhada no Unify Q, para quem lembra do Quest 16bits, o Q é uma versão Plus do Quest. É possível baixar o Q para teste e avaliação.

No meu ponto de vista há dois motivos importantes para que baixemos o Q
1- conhecer o produto e estudar sua utilização junto aos desenvolvedores/clientes, pois o produto é muito bom !

2- analisar a parte visual do produto e seus recursos que são incríveis! E ver o q suas aplicações TD podem oferecer aos seus clientes pois, todo o Unify Q foi construído com o Team Developer 5.2.

abraços
Lairton N de Almeida Jr.

quarta-feira, 17 de fevereiro de 2010

Manutenção na lista de discussão

Estou fazendo uma manutenção na lista de discussão retirando e-mails cadastrados que não existem mais.
Caso eu exclua alguém indevidamente, basta me mandar um mail que eu cadastro novamente.
Se alguém quiser trocar o mail que está cadastrado basta avisar.

Abraços
Lairton.

segunda-feira, 31 de agosto de 2009

Problemas com relatório não encontrado

Normalmente colocamos os qrps e imagens na mesma pasta do executável para que, quando o aplicativo precisar usar esses arquivos, eles sejam encontrados facilmente por estarem na mesma pasta do executável. Fazemos isso devido a um comportamento do Windows que podemos denominar de Current Directory, ou Diretório Atual. Quando executamos um aplicativo, Current Directory aponta para a pasta em que o executável está, pois o Windows, por default, configura a propriedade “iniciar em” do atalho, para apontar para a mesma pasta onde o executável está. Para ver isso clique com o botão direito em qualquer atalho no seu Windows.

É graças a esse comportamento do Windows que encontramos os qrps e imagens quando estão na mesma pasta do executável. Mesmo que dentro das aplicações nós não informamos o path, apenas o nome do arquivo.

Porém, a execução de algumas ações podem fazer com que Current Directory seja modificado em run-time sem que percebamos isso. Por exemplo, qualquer aplicação que permitir que o usuário escolha uma pasta para salvar um arquivo gerado pela aplicação. Um exemplo muito prático disso é uma aplicação que salve algum arquivo txt ou pdf e abra a caixa de diálogo para o usuário escolher onde ele deseja salvar o arquivo gerado. Após escolher a pasta e salvar o arquivo, Current Directory passa a apontar para o local escolhido pelo usuário. Devido a isso, caso a aplicação necessite de algum qrp, ela passa a não encontrar mais nenhum qrp, imagem ou outro arquivo que esteja na pasta do executável. Alguns clientes implementaram uma rotina que verifica a existência do qrp e a própria SalReport*** informa que o qrp não foi encontrado. Porém, o qrp encontra-se no diretório do executável. Todo o problema é “resolvido” saindo do sistema e entrando novamente.

Para resolver de fato, sem que seja necessário fechar e entrar novamente o sistema, recomendo que coloquemos em nossas aplicações uma linha de código que determina o valor que desejarmos para Current Directory.

Call SalFileSetCurrentDirectory( sNewDirectory )

Minha sugestão é utilizarmos essa linha de código antes de fazer qualquer chamada a SalReportView(), SalReportPrint(), SalReportTableView() ou SalReportTableCreate() . Porém, sNewDirectory precisa conter o caminho correto do local onde o executável está localizado. (pois é lá que estão os qrps). Esta informação é uma das informações presentes numa variável global do SQLWindows chamada strArgArray. Como esta variável possui mais informações do que precisamos, precisamos excluir dela apenas o caminho e então setar CurrentDirectory corretamente. Para determinarmos o valor de Current Directory para o local onde o executável que está sendo executado está, devemos fazer o seguinte:



Dessa forma este problema não acontecerá novamente.

um abraço
Lairton N de Almeida Jr.

sexta-feira, 28 de agosto de 2009

Menu ou RibbonBar ?

Um dos recursos novos do TD 5.1 e que continua firme e forte no TD 5.2 é a nova forma de mostrar os menus dos aplicativos. A Ribbon Bar é aquela forma nova introduzida aos usuários Windows através do MS Office 2007.

Como uma imagem vale mais que mil palavras, vou direto ao assunto:

Abaixo você pode ver uma estrutura de outline normal, com a definição de um menu típico de aplicativo. Um MDI com diversos pop-up menus e menu items.





Esta estrutura irá gerar um menu bem comum aos usuários de aplicativos feitos com o SQLWindows, porém, a partir da versão 5.1 esta história muda. Os menus podem ser mostrados como RibbonBar, conforme imagens abaixo:





O ideal é que seja feito no processo de migração uma análise de como você deseja que seus usuários visualizem o menu dos aplicativos, já que agora uma área maior da janela passará a ser utilizada. Você terá que buscar ícones (se já não usa) e estudar seriamente a possibilidade de retirar a barra de ferramentas da janela onde o RibbonBar ira aparecer (para manter-se no padrão de aplicações que usam este recurso). Explorar o uso de Windows Menu e modernizar o visual dos menus da sua aplicação.

As duas formas de visualização estão disponiveis. Você pode manter os menus como eles aparecem hoje, se desejar. Ou pode modernizar os menus das suas aplicações tornando-as similares ao Office2007, imagino que os usuários irão adorar a novidade.

Já ia me esquecendo um detalhe, para informar ao SQLWindows que é para mostrar os menus como Ribbon Bar, o esforço de programação necessário é o seguinte:

On SAM_AppStartup
Set bMenuBarAsRibbonBar = TRUE

É isso mesmo, você não terá que modificar nada no outline, onde seus menus são definidos. Imagino que não dará muito trabalho migrar este recurso não é mesmo !

:)

um abraço,
Lairton N de Almeida Jr.

sábado, 25 de julho de 2009

Dicas de Programação

Prosseguindo com as dicas ...

11- Construa (ou modifique) seus menus através de uma interface amigável e de fácil utilização. Em modo de Design coloque o foco no objeto top level que você deseja configurar o menu, clique com o botão direito do mouse e acione o menu chamado Menu Editor. Na versão 5.2 você terá um incentivo a mais para utilizar o Menu Editor, através dele é possível adicionar imagem (ícone ou bitmap) a um item de menu, que, a propósito, no TD5.2 poderá ser mostrado também como Ribbon Bar.

12- Procure não utilizar as funções SqlImmediate () e SqlExists () em laços (while e loop) pois estas funções utilizam um handle sql interno de forma padrão, ou seja, não otimizada. Vindo a ser responsáveis pela maioria dos problemas de performance em sistemas.

13- Antes de imprimir seu programa fonte, configure as opções de impressão no menu File/Page Settings. Certifique-se de que selecionou o radio button Selection Only, caso contrário todo o seu outline será impresso.

14- Cuidado ao utilizar a função SalPostMsg () - a sua utilização exagerada pode fazer o aplicativo "sentar", ou seja, ficar muito lento.

15- Quando estiver em modo Design e quiser configurar o Grid basta acionar o menu Tools / Preferences e selecionar a guia Presentation. Lá você poderá configurar se o Grid estará ativo ou não além de especificar sua altura e largura.

16- Para pegar o handle de um objeto que não possua handle, como background text e group box, utilize a função SalGetFirstChild (hWndForm, TYPE_BackgroundText) que retornará o handle do primeiro background encontrado na sua tela. Utilize a função SalGetNextChild para obter o próximo background e para saber que encontrou o objeto correto utilize SalGetWindowText. Lembre-se de setar bStaticAsWindow = TRUE no App_Startup da sua aplicação.

17- Sempre que você for alterar um componente COM previamente registrado lembre-se de desregistrá-lo do seu servidor. É muito simples, basta acionar o menu Project Un-register Server.

18- Utilize a função GetUserDefaultLangID( ), definida na biblioteca kernel32.dll, para identificar o idioma default do Windows em que o aplicativo está sendo executado. Assim você pode facilmente identificar o idioma e carregar o seu aplicativo devidamente "traduzido" para o idioma nativo. Consulte o capítulo 13 do livro Programando com o CTD2000 para maiores detalhes e exemplos.

19- Lembre-se que o comando de busca do SQLWindows, menu Edit/Find, baseia-se na parte do outline que está atualmente carregada na janela Detail, ou seja, na janela mostrada do lado direito do mdi principal do SQLWindows. Por exemplo: Se você procura por um determinado datafield mas a janela Detail do SQLWindows esta mostrando o conteúdo da seção Internal Funcions, o SQLWindows não encontrará o objeto.

quinta-feira, 23 de julho de 2009

Dicas de Programação

Seguirei publicando algumas dicas de programação que vim montando ao longo de algum tempo.

1- Utilize os arquivos tipo APL para guardar suas bibliotecas de uso genérico. Você pode ter quantos arquivos tipo APL quiser. A sua utilização só vem a melhorar a organização das suas bibliotecas. Na seção Libraries utilize a declaração File Include para utilizar suas bibliotecas. Usando APLs sua equipe terá mais facilidade em trabalhar ao mesmo tempo realizando manutenção em diversos módulos da mesma aplicação simultaneamente sem que uma pessoa atrapalhe o trabalho de outra. Essa dica acaba puxando a segunda dica.

2- Faça uso dos arquivos do tipo APL. Você pode ter vários arquivos num único projeto. Suas classes, funções de uso genérico, definições de constantes, definições de ícones etc podem estar localizados em arquivos tipo APL diferentes.

prosseguindo...

3- Utilize o Team Object Manager para gerenciar seus projetos, equipes e controle de versão dos seus aplicativos. O TOM acompanha o Team Developer e é uma ótima ferramenta para gerenciamento de projetos. Com um ótimo controle sobre versões dos seus aplicativos, equipe, builds e arquivos de um modo geral. Você pode usar o TOM para gerenciar qualuqer tipo de projeto, não apenas projetos em SQLWindows, mas também projetos em qualquer liguagem, qualquer tipo de arquivo etc.

4- Muita atenção ao utilizar Timers - SalTimerSet () e SalTimerKill () . Geralmente é delicado depurar um programa que utiliza Timers. Preste muita atenção!

5- Procure não utilizar SqlPrepareAndExecute () no interior de laços - while e loop - pois o seu tempo de execução é maior do que simplesmente SqlPrepare (). Na medida do possível coloque dentro do laço a função SqlExecute () e antes de entrar no laço um SqlPrepare ().

6- Procure seguir a padronização dos nomes de objetos e variáveis sugeridas pela Centura. Dessa forma seus desenvolvedores não terão dificuldades em ler a documentação online fornecida pela Centura. Você ganha produtividade com isso.

7- Ao nomear seus objetos e variáveis, procure não utilizar letras acentuadas. Isso pode confundir o compilador do SQLWindows. Evite problemas.

8- Para que uma determinada função não seja visível na instância, ou seja, funções privadas de uma determinada classe, coloque dois "underscore" antes do nome da função. Assim : Ao invés de usuar "fFazAlgumaCoisa ()" utilize "__fFazAlgumaCoisa ()".

9- Você pode tirar ou colocar as barras de rolagens horizontal e vertical do formulário que você está desenhando acionando o menu Layout / Show Design Scroll Bars.

10- Evite utilizar muitos frames numa mesma janela. O Windows demora muito tempo para desenhar um frame. Substitua os frames pelo objeto picture. Você pode fazer tudo o que um frame faz e ainda tem a vantagem de poder manipular uma picture.