Pesquisar na Comunidade
Showing results for tags 'data lider'.
Encontrado 2 registros
-
Bom, depois de muitas horas, consegui colocar para funcionar a função de procurar porta no Firemonkey. Não tive a oportunidade de testar todo o componente, mas pelo que pude verificar a única coisa que impedia ele de funcionar como deveria era o formulário de diálogo do ACBrECF. Então venho aqui trazer as modificações e suas justificativas. Observações Todas as alterações foram testadas em uma impressora DARUMA MACH 2. A versão do Delphi foi XE8 Trial, muito provável alguma coisa ou outra não vá funcionar em XE5-XE2 sem alguma alteração muito pequena.(talvez apenas tipos). Foi adicionado um IFDEF VER290(XE8) , cabe a alguém testar em versões anterior e verificar o funcionamento. Novas USES (Somente FMX) System.Character - Utilizada para conversão em variáveis do tipo CHAR. System.Types - Utilizada para utilização em run-time de variáveis do tipo TRectF em canvas do Firemonkey. System.UIConsts - Utilizada para conversão de variáveis do tipo cor do Firemonkey (TAlphaColor). Problemas Encontrados Não era possível exibir formulários em run-time no firemonkey, apresentava erro de resource, a solução foi utilizar o CreateNew: {$IFNDEF FMX} fsFormMsg := TForm.create( Application ) ; {$ELSE} fsFormMsg := TForm.CreateNew( Application ) ; {$ENDIF} A cor de fundo do formulário não era alterada: fsFormMsg.Fill.Kind := TBrushKind.Solid; As propriedades da fonte como também sua cor não era possível de serem alteradas (foi adicionado uma tarefa por vocês para futuro). Uma observação é que a propriedade "TagStr",é presente em todos os componentes Firemonkey. <b>ACBrECF.pas</b> - Adicionado nova propriedade para cor de fonte apenas para o firemonkey property FormMsgColorFont : TAlphaColor read fsFormMsgColorFont write fsFormMsgColorFont ; //Realiza composição das 3 informações em apenas 1 tag fsFormMsg.TagString := ECF.FormMsgFonte.Size.ToString + ';' + ECF.FormMsgFonte.Family + ';' + AlphaColorToString(ECF.FormMsgColorFont); <b>ACBrECFClass.pas</b> - Depois é desmontada para leitura das informações //Carregando informações da fonte, family e cor with TStringList.Create do try StrictDelimiter := True; Delimiter := ';'; DelimitedText := fsFormMsg.TagString; fsFormMsg.Canvas.Font.Size := Strings[0].ToSingle; fsFormMsg.Canvas.Font.Family := Strings[1]; fsFormMsg.Canvas.Fill.Kind := TBrushKind.None; fsFormMsg.Canvas.Fill.Color := StringToAlphaColor(Strings[2]); finally Free; end; A rotina de desenho não estava adequada para o Firemonkey. fsFormMsg.Width := Round(fsFormMsg.Canvas.TextWidth(Texto)) + 25; fsFormMsg.Height := Round(fsFormMsg.Canvas.TextHeight(Texto))+ 15; Application.ProcessMessages; //Se não adicionar essa linha, o firemonkey não faz a pintura o texto. fsFormMsg.Canvas.BeginScene; //Todo canvas no firemonkey é necessário este bloco de proteção. try fsFormMsg.Canvas.StrokeThickness := 1; //Espessura do pincel. fsFormMsg.Canvas.FillText(TRectF.Create(0, 0, fsFormMsg.Width, fsFormMsg.Height), Texto, True, 100, [], TTextAlign.Center, TTextAlign.Center); finally fsFormMsg.Canvas.EndScene; end; Por ultimo, e não menos importante, a rotina de pressionar a tecla para cancelar o dialogo não estava funcionando, o código informado não atende a situações diversas que o Firemonkey apresenta no OnKeyDown. O Firemonkey quando pressionado por uma tecla que não é dita como especial, a variável KeyChar é preenchida, porem se você utilizar uma tecla como F1 ou ENTER o KeyChar fica em branco, então o Key é preenchido. if (fsFormMsgTeclaParaFechar <> 0) and (fsFormMsgEstado <> fmsAbortado) then begin if (KeyChar <> #0) and (Integer(KeyChar.ToUpper) = fsFormMsgTeclaParaFechar) then fsFormMsgEstado := fmsAbortado else if (Key > 0) and (Key = fsFormMsgTeclaParaFechar) then fsFormMsgEstado := fmsAbortado else begin Key := 0; KeyChar := #0; end; end; ACBrECFClass.pas ACBrECF.pas
- 19 replies
-
- 1
-
- firemonkey
- data lider
- (e 2 mais)
-
[DICA] Uso simultâneo de VCL e FMX na ACBr
um tópico no fórum postou Data Lider Dúvidas Gerais sobre o ACBr
Atenção para XE2+ Bom, essa semana estamos com necessidade de utilização de dois projetos em ambos ambientes VCL e FMX, enfrentamos alguns problemas de compilação das Unit ACBR, e principalmente versões geradas incorretas porque a SCOPE estava invertida no momento da compilação, então vou adicionar algumas informações para registro e pesquisa de usuários. Projeto 1 - VCL Projeto 2 - FMX Problema 1 - A ACBr.INC é unificada dentro da pasta de fontes do componente ACBrCupom, sempre quando necessário compilar um projeto de cada framework era necessário a troca. Solução - Excluído o arquivo, e adicionado na pasta dos projetos, cada um com sua definação VCL ou FMX. ------------------------ Problema 2 - Mesmo adicionado essas definições, existe o conflito de Units, eu posso ter "Dialog" para VCL (VCL.Dialog) como também para FMX (FMX.Dialog). Em quanto essa dúvida não for respondida não é possível compilar o projeto, para não ter que alterar todas as units do projeto, é necessário ir em Tools -> Options -> Delphi Options -> Libary e então preencher o campo "Unit scope names:" com o valor padrão, seja ele VCL ou FMX, assim é possível saber de qual dialogo será compilado. Isso gera problemas como compilar units VCL dentro do Firemonkey (sim é isso é possível) e trazer problemas futuros para o projeto, principalmente de você trabalhar como OSX que é o nosso caso, nos enfrentamos fechamento de janelas inexplicáveis por esse motivo. Solução - Deixar o campo em branco, e definir a Unit scope names no projeto, basta ir em "Project > Options > Delphi Compiler > Unit Scope Names" e então clicar em "..." e adicionar. (Lembrando que isso é armazenado por configuração, o use seja você precisa configurar tanto em Debug como Release).