Mudanças entre as edições de "Bibliotecas Gráficas"
(→Problemas Conhecidos) |
(→ATRIBUIR "VAZIO" PARA UM CAMPO DO DE) |
||
Linha 237: | Linha 237: | ||
nota: só completa os números ao sair do campo, ok? | nota: só completa os números ao sair do campo, ok? | ||
− | === | + | ===Aribuir "vazio" para um campo do DE=== |
Quando for atribuir um "nada" para um campo do DE q representa uma data, atribuir null ao invés de ' '; O banco de dados prevê null ou data para campos date e datetime, mas não prevê ' ' ' (string vazia). | Quando for atribuir um "nada" para um campo do DE q representa uma data, atribuir null ao invés de ' '; O banco de dados prevê null ou data para campos date e datetime, mas não prevê ' ' ' (string vazia). | ||
Edição das 11h04min de 8 de agosto de 2014
Índice
Desenvolvendo interfaces com a Biblioteca Uniware
Esse guia tem por funcionalidade auxiliar o desenvolvedor na programação de interfaces utilizando a biblioteca da Uniware.
É importante observar que esse artigo não aborda a instalação dos componentes gráficos. Para isso, visite Instalação Delphi
Getting Started
Nesse capítulo podem ser encontrados materiais referentes ao desenvolvimento do unilab para quem está começando.
Banco de dados
Toda alteração no banco de dados é replicada na função TFAtualiza@Ver_Ultimas.
Em casos de views, é necessário escreve-las em:
- TFAtualiza@CreateViews;
- TFAtualiza@DropViews.
Criando interfaces
Os templates de interface da Uniware encontram-se em Arquivo > Novo... > aba 'UNIWARE_BETA'. utilize os templates:
- FBaseSelR03;
- FBaseCadR03;
- FBaseRelR03.
R03 é a biblioteca de componentes visuais que a Uniware utiliza em seus templates e o tipo varia de acordo com a necessidade, como explicado abaixo:
Ao criar uma unit, adicionar o tipo ao sufixo:
- Sel, Listagem de registros;
- Cad, Manipulação de dados;
- Rel, Referentes aos relatórios.
Será necessário adicionar ao uses a unit UFMain, para integrar-se com o projeto todo.
Já no uses da interface, as principais bibliotecas a serem adicionadas são Ulib e ULibR03
A Unit, ao ser criada, possui uma parte do código assim:
var Form1: TForm1;
No projeto essa parte é desnecessária, visto que o FMain realiza a instanciação das interfaces de outra forma.
Ao apagar o código acima de uma unit, remover do programa UNILAB_BETA a criação automática da interface, como na linha:
Application.CreateForm(TForm1, Form1);
Propriedades da Interface
O capítulo a seguir identifica possíveis problemas que o programador pode encontrar ao desenvolver suas primeiras interfaces. Relevando as propriedades principais:
TFBase???R03
??? pode-se interpretar como 'Cad' ou 'Sel'.
Dentro da unit UFMain, adicionar o PS (Se necessário, adicionar um CS próprio) para gerenciamento da interface a ser criada.
Desabilite a propriedade BorderIcons.biHelp, pois não disponibilizamos o help por interfaces, ainda.
FormStyle = fsMDIChild, não me lembro bem o objetivo, mas é necessário.
Para ser instanciado, é necessário adicionar aos eventos do TUPS???:
Result := NOME_CLASSE;
No evento do click do Menu, para abrir a interface Sel, sua interface deve ser chamada utilizando UMenuCall('nomeCS','nomePS');
ps. Quando a tela não for da biblioteca, utilizar ChamaForm(TIPO_FORM);
TUQuery
- Nome Default: Q;
- Generico: Essa propriedade define a consulta a ser utilizada;
- SQL, SQLIB, SQLMS, SQLMySQL e SQLORACLE: consulta destinada à um tipo de banco. SQL deve ser configurada caso seja determinado Generico = true;
- TabelaPrincipal: Deve conter o nome da tabela utilizada no SQL, em interfaces SEL, é comum o uso de Views para essa consulta;
- TabelaPrincipalAlias: Caso a tabela possua um alias na SQL, ele deve ser informado aqui;
- UDataBase: referencia FMain.UDB que é a database do sistema.
TDataSource
- Nome Default: DS;
- UQuery: Esse campo deve estar referenciado para o componente anteriormente descrito, Q.
TUDataEntry
- Nome Default: DE;
- Limite: Determina a quantidade máxima de cadastros de detalhes;
- LinhasVisiveis: Define quantos campos aparecem abaixo do edit de detalhe (inclusive);
- UCadastro:Precisa referenciar o TUCadastro associado à grid;
- UDataSource: Esse campo deve estar referenciado para o componente anteriormente descrito, DS;
- UDataEntry: Quando for utilizar relações mestre-detalhe na interface, o Data Entry responsável pelo detalhe referencia o Data Entry do mestre.
- UsaScrollBar: Necessário quando o numero de 'Limite' ultrapassa 'LinhasVisiveis'.
TUDataEntry
- Nome Default: CAD;
- UDataEntry: Esse campo deve estar referenciado para o componente anteriormente descrito, DE.
Para poder trabalhar as configurações visuais da grid, como largura da coluna, propriedades de leitura, etc.
Use o RightClick nesse componente e selecione colunas da grid de procura.
(Você acessa a coluna individualmente buscando a propriedade Columns da DBGridP)
TUField
Para acessar os Campos do dataset, DoubleClick o componente de Query.- Nome Default: Q concatenado do mesmo nome da coluna do banco;
- Campo: Qual campo do banco ele representará;
- ChavePrimaria: Identificar a PK da tabela;
- Edicao: Indica o componente visual que edita esse valor;
- Filtra: Habilita o campo a ser uma chave no botão Filtra;
- NaNavegacao: Define se a coluna aparecerá na Grid;
- Ordena: Permite o usuário Ordenar os resultados utilizando a coluna como parâmetro, é obrigatório no mínimo 1 dos campos ser True;
- PreencheChave: Em uma situação mestre-detalhe, esse parâmetro permite que seja inserido no campo a chave primária do mestre;
- Procura: Habilita a procura de valores na coluna pelo botão Procura;
- Sequencial:Quando for um número seqüencial (auto-incremento) informar o nome da tabela a qual o campo pertence;
- Tabela: Indica a qual tabela o campo pertence;
- TabelaAlias: Preenchido caso a tabela possua alias;
- Titulo: valor a ser apresentado no cabeçalho da coluna;
TUFBase???R03Data
??? pode-se interpretar como 'Cad' ou 'Sel'.- Nome Default: ???Data;
- No SelData:
- CallCadModal: Não permite que seja aberta mais de uma tela de Cad;
- CallCs: Nome do CS que gerenciará essa interface (UFMain);
- CallPs: Identificar o processo da interface (UFMain);
- No SelData:
TUOrdemCombo
(Esse é um componente Invisível)- Nome Default: OC;
- AliasInicial: Coluna definida para que o edit possa fazer uma busca;
TDataSeeker
- É a popup de auto-complete do projeto:
- Flutuante: Não prende o seeker nas delimitações do form;
- GridColumns: Colunas exibidas na popup;
- Hotkeys: configurar o botão de retorno;
- NextCtrl: Componente a receber o foco quando a popup for encerrada;
- OrdemInicial: Define a coluna em que a pesquisa se ordena;
- Query:
- SingleFields: Define o nome das colunas;
- SingleQuery: Se a consulta utiliza apenas uma tabela;
- SingleTable: Nome da tabela;
TUEdit ou outras formas de input
Caso o componente esteja referenciando um CODI, Alterar:
- AJCod - Preenche o campo com zeros;
- MaxLength - Define o tamanho máximo do campo.
Configurando permissões
Ao criar uma nova interface, por padrão nenhuma permissão é atribuída aos usuários do sistema, com exceção do administrador que possui todos os direitos do programa.
Dependendo de sua regra ou aplicação, as permissões da interface podem exigir uma configuração avançada. A seguir estão as informações mais importantes desse processo:
Compreendendo o USeg
TUSeg é a classe responsável pela gerência de permissões no sistema Unilab. Esse componente faz parte da biblioteca R03.
Instanciada no FMain, habilita/desabilita componentes da propriedade MainMenu. A configuração do conteúdo é feito na interface UFUserCad.
Há duas propriedades que não tenho certeza da funcionalidade: Tabelas e Views.
Gerenciando permissões
Ao incluir uma interface no menu, automaticamente é criado as permissões 'Inclusão', 'Alteração', 'Exclusão' e 'Consulta' para a interface criada.
É possível visualizar tais permissões pelo menu Cadastros > Usuários, consultando o usuário de preferência e selecionando a aba Direitos.
Na interface estão as opções do menu, antecipadas pelo botão que altera a permissão para o usuário em questão.
Para realizar a leitura/escrita das permissões via código, a TUSeg possui o método TemDireito['NOME_FORM','TIPO_Operação']
Adicionando uma função específica
Algumas interfaces aplicam uma regra específica ao software, portanto, precisam de uma permissão diferenciada para realizar uma função unica.
O componente USeg possui uma propriedade Direitos utilizada para armazenar permissões especiais. Nessa propriedade, é necessário adicionar uma nova linha seguindo os parametros:
NOME_FORM | NOME_PERMISSÃO | DESCRIÇÃO_PERMISSÃO
Problemas Conhecidos
Abaixo estão listadas algumas peculiaridades da biblioteca (problemas ou bug's) que podem impedir o bom funcionamento tanto do software em si quanto o ambiente de programação.
O campo CODI
A biblioteca, hoje, trabalha a chave primária como string, e somente com esse tipo de dados;
Além disso, ela suporta um limite de nove caracteres, e para uma melhor visualização, a Uniware preenche os valores com zeros à esqueda.
Recarregando o DataSource
Quando for alterado alguma estrutura do banco de dados, será necessário recarregar o datasource da interface caso ela esteja aberta.
Para isso, alterar algum campo da interface e fechar/abrir novamente a unit. (Há casos que não é necessário a alteração da propriedade)
Remover um campo calculado
Ao remover um campo calculado da lista de TUFields, nenhum outro registro é selecionado.
Se o programador selecionar alguma interface sem antes selecionar um campo da lista,
o Delphi encerrará acusando um erro.
AJCOD, recursos necessários
Há alguns recursos necessários para funcionar o AjCod, são eles: MaxLength & SoNumeros
nota: só completa os números ao sair do campo, ok?
Aribuir "vazio" para um campo do DE
Quando for atribuir um "nada" para um campo do DE q representa uma data, atribuir null ao invés de ' '; O banco de dados prevê null ou data para campos date e datetime, mas não prevê ' ' ' (string vazia).
Outros componentes importantes
Talvez você não os use, mas é importante registrar aqui outros componentes da biblioteca para futuras consultas:
UFBase
Esse formulário é a base dos forms utilizados no sistema unilab. A partir desse modelo são criados os três tipos de interface do sistema: Rel, Sel e Cad, Que por sua vez são herdadas nas interfaces da biblioteca R03.
Nome | Funcionalidade |
---|---|
constructor TFBase.Create(AOwner: TComponent); | Todo formulário possui um componente com os eventos e dados referentes ao formulário. formulários mais especializados podem ter FormData especializados.
A checagem do FormData é feita na constructor dos Forms. Além disso, este construtor cria o helptimer. O helptimer serve para evitar que o usuário abra várias vezes o help pressionando F1 várias vezes. |
procedure FormClose(Sender: TObject; var Action: TCloseAction); | Evento para fechar o form e destruí-lo. Não entendi como funcionam as mensagens que ele procura e manda antes de fechar o form. |
function FormHelp(Command: Word; Data: Integer; var CallHelp: Boolean): Boolean; | Chama a ajuda relacionada à tela quando usuário pressiona F1. O arquivo de help deve estar no <path do executável>\<LibParam.ProgHelp>\<nome do form>.p. Se o arquivo não existir copia para ele o arquivo “<path onde esta o executável>\manunilab..p”. Por fim, executa o help.
|
function SearchMsg(s:string): TUMsg; | Procura pela mensagem - nil se nao encontrar. Chama o SearchMsg do PS do Form. |
function SearchMsgStarting(s:string): TUMsg; | Procura pela mensagem começando por s - nil se não encontrar. Chama o SearchMsgStarting do PS do Form. |
function CreateMsg(pnome, pcs, pps: string;pforcenew:boolean=True): TUMsg; | Criação de mensagem de comunicação com outro processo. Chama o CreateMsg do PS do form. |
procedure CreateCall(pname,pcs,pps,pretorno:string;pmodal:boolean=False); overload; | Cria uma chamada a uma tela de seleção - CreateCall('nome','cs','ps','ret'). Chama uma tela de seleção. Se a tela já existir, dá foco nela. |
procedure CallCad(pmode: TModoCadastro;pname,pcs,pps:string;key:TUPars=nil; pmodal:boolean=False); overload; | Cria uma chamada a uma tela de CAD. Idêntico ao CreateCall, mas adicionado à possibilidade de definir o modo (inserção, alteração, exclusão) e os valores da chave. |
procedure Answer(pmsg: TUMsg); virtual; | tratamento das mensagens |
procedure DoAfterCreateForm; | apos a criar e mostrar o form |
procedure DoAfterLoaded(pcalled:boolean); | apos a carregar o form, independente se direto ou por chamada msg (f2...) |
procedure DoAfterCreateMsg(pmsg:TUMsg); | apos criar uma mensagem de ligacao com outro processo |
procedure DoBeforeDestroy; | antes de destruir o PS |
procedure DoOnDoneUpdated(pdone:Extended); | o processo avancou |
property PS:TUPS read FPS write FPS default nil; | qual instancia de processo e dono do form |
procedure Confirm(pclose:boolean=False); | Confirma a execucao do processo. Metodo chamado pelo programador para confirmar o form e chamar o processo que o form executa - no evento OnProcess do FormData. |
procedure Cancel(pclose:boolean=True); | cancela a execucao do processo |
property Done:extended read GetDone write SetDone; | Informa o quanto o processo esta pronto (%) |
procedure PSDestroy(pmsg: TUMsg); virtual; | o PS que comunicava pela mensagem enviada foi destruido |
property Msg[s:string]: TUMsg read GetMsg; | ? |
property Processing : boolean read FProcessing; | ? |
USys
- Gerente do sistema, centraliza os processamentos do sistema:
- executa processos (dos CSs);
- trabalha direitos (verificar, delegar);
- troca de informacoes entre processos;
- controle e troca de informacoes com BD (a implementar no futuro 'proximo');
- Primeiro a ser instanciado, inicializa a aplicacao;
- As configuracoes gerais do sistema ficam em um .ini junto com o .exe na secao [Geral];
- As configuracoes por maquina ficam no registro do windows;
- As configuracoes por usuario ficam no cadastro do usuário.
Classe | Nome | Funcionalidade |
---|---|---|
protected | procedure Notification(AComponent: TComponent; Operation: TOperation); override; | Recebe uma notificação para remover um CS da ListCS onde AComponent é o cs que será destruído e Operation = opRemove. |
public | function Initialize: boolean; | Inicializa o Sys. Verifica a existência dos componentes UError, UCPU e UUser e cria em ListCS uma lista com todos os UCS do form e chama o Initialize de cada cs. Se faltar algum componente ou o initialize de algum cs falhar (retornar false) então interrompe o processo e retorna false. |
procedure IniWriteKey(pchave:string;pvalor:string); | Escreve no arquivo ini com o mesmo nome do executável e no objeto USys.INI o valor pvalor na chave pchave. | |
procedure VersionCheck; | Compara o número da versão que está gravado no arquivo ini com a versão do executável. Se o executável possui uma versão superior chama o evento BeforeNewVersion, atualiza a versão no Ini e chama o AfterNewVersion. | |
function CSCount : integer; | Retorna quantidade de CS do form. | |
function SearchCS(s:string): TUCS; | Recebe o nome de um cs e retorna a instância. Se não existe retorna nil. | |
function SearchPSExe(pcs,pps:string;pincludedependent:boolean=False):TComponent; | Recebe o nome de um ps e retorna a instância. Se não existe retorna nil. | |
function FormClassOf(pcs,pps:string):TFormClass; | Retorna o tipo de form do processo informado | |
function NewPS(pcs,pps:string;pdependent:TComponent=nil):TComponent; | Cria e retorna uma nova instância PS do pcs. Onde o seu CS será o pcs e sua propriedade Dependent será o pdependent. É isso mesmo? Quando devo usa esta função? | |
function AnyPS(pcs,pps:string;pincludedependent:boolean=False):TComponent; | Retorna o PS pps. Se a instancia não existe, cria. | |
procedure BroadCast(o:TObject); | Repassa o objeto para o sistema inteiro (para todos os PS do sistema). Para que serve exatamente? | |
procedure AtualizeBarraTarefas; | Atualiza os botões da barra de tarefas, de forma que exista um botão para cada OS instanciado. | |
property ExePars : TUPars read FExePars write FExePars; | Lista de parâmetros passados na chamada do executável. | |
property Ini : TUpars read FIni write FIni; | Parâmetros do sistema, lidos do arquivo de inicialização. | |
property PSs : TUPars read FPSs write FPSs; | Lista dos PS instanciados. | |
property PSn : integer read FPSn write FPSn; | Número de PSs instanciados. | |
property PSb : TList read FPSb write FPSb; | Lista com o nome dos botões da barra da tarefas. | |
published | ||
property Description : TStringList read GetDescription write SetDescription; | Breve descrição do objetivo desta instância. | |
property Documentation: TStringList read GetDocumentation write SetDocumentation stored false; | Documentação para esta instância. | |
property Development : TStringList read GetDevelopment write SetDevelopment stored false; | Observações sobre o desenvolvimento. | |
property ID : string read FID write SetID; | para registro do windows. | |
property Version : string read FVersion write FVersion; | Versão do sistema. | |
property TaskBar : TWinControl read FTaskBar write SetTaskBar; | Barra de tarefas do form principal. | |
property BeforeNewVersion : TBeforeNewVersionEvent read FBeforeNewVersion write FBeforeNewVersion; | Este evento é disparado pelo VersionCheck quando o executável for uma nova versão. | |
property AfterNewVersion : TAfterNewVersionEvent read FAfterNewVersion write FAfterNewVersion; | Este evento é disparado pelo VersionCheck depois do BeforeNewVersion e depois de atualizar a versão. |
UUser
Detém as informações do usuário que está logado.
- property UserControl : boolean read FUserControl write FUserControl default True;
- para que serve?
- property UserID : string read FUserID write SetUserID;
- ID do usuário (Login);
- property UserName : string read FUserName write FUserName;
- Nome do usuário (para exibição)
- property UserPassword: string read FUserPassword write FUserPassword;
- Senha do usuário que está logado.
UErros
A idéia deste componente é ele receber e tratar todas as mensagens de erro do sistema. Entretanto, este componente ainda não teve nenhuma funcionalidade implementada (até hoje 11/12/2006).
UCS
Componente de Sistema. Gerencia a troca de mensagens entre um determinado grupo de processos de sistema.
UPS
Processos de Sistema.
UPSCad, UPSSel, UPSRel
São componentes idênticos ao UPS (até hoje 11/12/2006). Para um processo que representa um form de cadastro deve ser utilizado o UPSCad.Para um form de seleção o UPSSel, para um form de relatório um UPSRel e para outros forms ou processos o UPS.
UDatabase
Contém a informação do tipo de banco de dados deve ser utilizado e têm a relação de quais componentes de conexão utilizar para cada banco de dados.
UMaskEdit
Igual ao UEdit com opção de máscara para digitação.
UDateEdit
Igual ao UEdit com máscara para digitação de datas.
- Valor : Variant, Valor de edição.
UNumericEdit
Igual ao UEdit com alinhamento à esquerda e com propriedades para digitação de números: DecimalPlaces, PermiteNegativo
UComboBox
Em Uitens colocar os valores como Sim|S então aparece Sim no combo mas o valor dele é S
UCheckBox
Checkbox que permite determinar o valor e imagem para marcado e desmarcado.
- Domínio, Valores possíveis, na mesma seqüência das imagens do IL.
- IL, ImageList com as imagens para o checkbox.
- FirstImage, LastImage, número da primeira e última imagem do IL para utilizar.
- Valor, contém o valor atual do campo.
- Valor.Type, contém o tipo dos valores do campo.
UPars
Lista de parâmetros. Não entendi como funciona.
TURel
Componente para montar relatórios em modo texto, possui vários recursos para facilitar o desenho do layout do relatório. É organizado em impressão de uma parte fixa do relatório e impressão do corpo do relatório.
- BodyLines, Quantidade de registros do corpo (detalhe) que cabe em uma página.
- BodyStart, Número da linha onde inicia o corpo do relatório.
- LeftOffSet, Número de colunas em 20cpi que o relatório deve ser deslocado em relação à margem esquerda.
- ModeFileRep, mdAssignedFile = Saída em AssignFile(...,Port). mdCreateFile = Saída em CreateFile(Port...
- PageLength, Número de linhas equivalente à altura da página. Uma página Carta, com 6LPI contém 64 linhas. Esta propriedade serve apenas para configurar a impressora depois de quantas linhas deve ser dado o saldo de página.
- Port, porta de impressão ou caminho e nome de arquivo de saída.
- PrinterType, define o conjunto de comandos de impressão a utilizar (ptEpson, ptHP).
- Spacing, número de linhas por polegada (sp6LPI ou sp8LPI)
- TopOffSet, Número de linhas que o relatório deve ser deslocado em relação ao topo da página.
- OnPrintBody, Incluir aqui a rotina que imprime um registro do corpo (detalhe) do relatório. Quando for o último registro, o parâmetro pLast deve ser setado para true. Se pLast nunca for true o programa entrará em loop e ficará chamando este evento indefinidamente. Para o relatório ter alguma saída é obrigatório que este evento esteja implementado e gere algum texto para imprimir, ou seja em b seja atribuída alguma propriedade.
- OnPrintFixed, incluir aqui as rotinas que imprimem a parte fixa do relatório (cabeçalhos e rodapés). Se a OnPrintBody não estiver definida ou não gerar nada para imprimir então esta rotina nem é chamada.
Colunas, Para imprimir mais de uma página por folha na horizontal, adicione colunas a esta propriedade. É necessário que exista pelo menos uma coluna.
TURelCol
É um item da propriedade Colunas, pode ser adicionado em tempo de projeto pelo ObjectInspector ou em tempo de execução;
- BufferOut, Envia todo o conteúdo do Buffer do TURel para a impressora. Este método é chamado internamente ao final de cada página. Quando estiver definido mais do que uma coluna e passar false para o parâmetro *EndReport, ele apenas coleciona o conteúdo do Buffer no buffer da coluna ‘ProximaColuna’ e incrementa o contador ProximaColuna. Se esta for a última coluna ele manda o conteúdo para a impressora, e zera o contador ProximaColuna.
- Os campos do relatório devem ser determinados dentro dos eventos OnPrintBody e OnPrintFixed nos objetos b e f : TURelGrupo, respectivamente.
TURelColumn
Campo do relatório. Para criar uma coluna basta atribuir uma propriedade qualquer a um f[‘nomecampo’].
- Top, número da linha para imprimir o campo, em relação ao topo da página no OnPrintFixed ou em relação ao BodyStart no OnPrintBody. * A primeira linha é 0.
- Left, número da coluna para imprimir o campo e relação à margem esquerda da página em caracteres 20cpi, não importando o tamanho da fonte deste campo. A primeira coluna é 0.
- Width, número máximo de caracteres do campo.
- TextFont, tamanho da fonte: 5, 10, 12, 15 e 20cpi, que em uma impressora 80 colunas equivalem respectivamente a 40, 80, 96, 137 e 160 caracteres por linha.
- TextBold, Negrito. Se vc estiver utilizando fonte 12, 15 ou 20 cpi o texto em negrito será impresso em um caracter maior. (booleano).
- Alignment, Alinhamento. Alinha o texto à esquerda, centro ou direita dentro do campo. Para funcionar a propriedade width deve estar definida (<> 0).
- DecimalPlaces, Número de casas decimais. Uma vez atribuído, se a propriedade text contiver um número no formato ####.## o número será formatado truncando no número de casas decimais especificado e o separador decimal será a vírgula.
- ThousandSeparator, Utilizar separador de milhar. Uma vez atribuído, se a propriedade text contiver um número no formato ####.## o número será formatado com separadores de milhar. Se Decimal places não for atribuído ou for = 0, então o número será formatado como um número inteiro com separador de milhar.
- Text, Texto a ser impresso. Deve ser uma string.
UCodBarMatr
Unit com funções para impressão de código de barras em matricial. Basta incluir esta unit no uses e chamar a função codbar.
- TCodBar = (cbClean13, cbClean8, cbCLUPC, cbCL25, cbCL39);
- Tlpi = (sp6LPI,sp8LPI)
- function clean8(codigo: string): string;
recebe o número a codificar e devolve a string q contém os comandos para imprimir uma linha com código de barras
- codbar(codigo: string; tipo: TCodBar; ultlin: boolean; lpi: Tlpi; left : integer)
função criada para impressão de código de barras no mapa e protocolo do unilabw retorna uma string contendo os comandos que devem ser enviados para uma impressora padrão Epson com uma linha do código de barras selecionado. Se ultlin for false, imprime uma linha, salta meia linha, imprime outra linha e deixa o salto configurado para meia linha. Para isso deve ser passado o número de linhas por polegada e a posição horizontal (left) da barra em número de caracteres 20cpi em relação à margem esquerda. Na prática este recurso é útil para utilizar esta unit em conjunto com o componente URel, onde a coluna que contém este código de barras deve ser a última coluna da linha. Este recurso evita um espaço em branco entre a primeira e segunda linha do código de barras imprimindo uma linha com o mesmo código entre as duas linhas. Quando ultlin for false na linha seguinte deve ter uma chamada à mesma função com ultlin true, que reconfigura o saldo de linha para o tamanho normal.
RBuilder: Preview Maximizada
Para gerar um report com a tela de preview maximizada e com um determinado nível de zoom. Incluir no uses:
- ppViewr
Incluir o seguinte código no evento OnPreviewFormCreate do TppReport
- R.PreviewForm.WindowState := wsMaximized;
- TppViewer(R.PreviewForm.Viewer).ZoomSetting := zsPageWidth;
Criação de Tabelas
Na criação de tabelas no banco de dados para as telas da biblioteca deverão conter os seguintes atributos:
ULIBDINC – DATETIME data da inclusão do registro;
ULIBUINC – VARCHAR(20) usuário da inclusão do registro;
ULIBDALT – DATETIME data da alteração do registro;
ULIBUALT – VARCHAR(20) usuário da alteração do registro;
ULIBRELA – NUMERIC(9,0) sequencial de controle de alteração simultânea. Quando um usuário carrega um registro para alteração, carrega esse ULIBRELA junto, Quando for salvar a alteração consulta novamente no banco se o ULIBRELA ainda é o mesmo numero, se não for resulta em erro de registro alterado por outra estação, senão incrementa o numero do ULIBRELA e salva;
Em tabelas que realizarão transmissões deverão ter os atributos seguintes atributos:
CTRANSTRAN – VARCHAR(1) Utilizado em registros que são alterados apenas na central e transmitidos para o posto. O registro é incluído com N nesse campo e quando o registro é transmitido ele muda para S, ao tentar excluir o registro, se este estiver com S não permite.
CCENTRALTRAN – VARCHAR(9) Controle de transmissão da central. Deve ser atualizado sempre que um registro é alterado para que ele entre no próximo pacote de transmissão para o posto.
CPOSTOTRAN – VARCHAR(9) Controle de transmissão do posto. Deve ser setado como E na inclusão ou M na alteração para marcar os registros para ser transmitido para a central.
Observação: Para o futuro documentar nos requisitos como funciona a transmissão para explicar os demais detalhes do CCENTRALTRAN e CPOSTOTRAN.
Metodos e propriedades do RD
StartGroup – Inicia um grupo para inserção de conteúdo.
EndGroup – Finaliza o grupo para inserção de conteudo.
AddPage – Adiciona uma quebra de Página. *Não pode ser chamado de dentro de um grupo.
NextGroup – Retorna a posição vertical para impressão do próximo grupo de conteúdo com base na posição onde o último conteúdo foi impresso.
CurrentLine – Retorna a posição vertical onde o último conteúdo foi impresso.
NextLine – Retorna a posição vertical seguinte ao último impresso.
Métodos para formatação de texto:
Estes métodos só podem ser chamados de dentro de um grupo e sempre que um grupo é iniciado, ele reseta estas formatações.
FontName – Seta a fonte a ser utilizada no conteúdo.
FontSize – Determina o tamanho da fonte a ser utilizada.
FontStyle – Determina o Estilo da fonte (Negrito, Itálico, Sublinhado).
Métodos para impressão de conteúdo:
Estes métodos só podem ser chamados de dentro de um grupo
TextOut – Imprime um texto na posição especificada.
TextColumn – Imprime um texto na posição especificada dentro do objeto de coluna passado por parâmetro. Permite definir o alinhamento do texto dentro da coluna.
TextAlignment – Imprime um texto na posição e alinhamento especificados por parâmetro..
Line – imprime uma linha entre as coordenadas passadas por parâmetro.