Página 1 de 1

GETSYS pra multithread e algo mais

Enviado: 12 Abr 2017 19:55
por JoséQuintas
Agora que o A Simões perguntou sobre uma getsys é que vi esse detalhe.
Pra quem for usar multithread, precisa uma alteração relativamente simples: alterar STATIC var pra THREAD STATIC var.
Motivo simples: se não fizer isso, vai ficar misturado o controle das duas janelas, com resultado imprevisto
Pelo menos a getsys original do 5.2... tinha esquecido que fiz essa alteração.

Nenhuma alteração extraordinária, apenas alterações relativamente simples, que considero úteis, ou que o Clipper 5.2 precisava, ou que surgiu depois...

Multithread:
getsys1.png
Salvar os valores ANTES DE UM GET, e comparar depois DESSE GET pra ver se mudou alguma coisa. Se mudou, atualiza a tela. Falta isso inclusive no Harbour.
getsys2.png
Limite de tempo. Se inkey retorna 0, significa que o tempo acabou, então troca por ESC.
getsys3.png
Não aceita caracteres especiais
getsys4.png
O clique do mouse, limitado a um único get
getsys5.png
E a rotina auxiliar pra calcular o tamanho do get
getsys6.png
São pequenas alterações, não corre o risco de criar problemas.

GETSYS pra multithread e algo mais

Enviado: 12 Abr 2017 20:45
por asimoes
Obrigado Quintas

GETSYS pra multithread e algo mais

Enviado: 13 Abr 2017 01:42
por asimoes
Quintas,

Eu fiz uma modificação na sua GetSys, agora a navegação entre os campos é possível, se possível analise e deixe as suas criticas.
GETSYS (2).PRG
GetSys modificada para usar mouse com navegação entre os gets
(18.83 KiB) Baixado 190 vezes

GETSYS pra multithread e algo mais

Enviado: 13 Abr 2017 16:33
por asimoes
Pessoal,

Não gostei do resultado, esperava repetir o mesmo comportamento da getsys original, esse getsys eu não posso substituir pelo original do harbour é um problema de legado de sistema em clipper que temos, tentei usar a getsys original que já tem esse tratamento para mouse mas algumas aplicações apresentaram problemas por usar algumas funções que não tem na getsys, enfim vamos tentando.

GETSYS pra multithread e algo mais

Enviado: 13 Abr 2017 19:49
por asimoes
Não está perfeito mas já da pra usar.
O mouse pula de get em get pra baixo e pra cima obedecendo as validações, o meu objetivo e que seja clicado em qualquer get não sequencial
GETSMF.PRG
GetSys com mouse
(19.05 KiB) Baixado 146 vezes

GETSYS pra multithread e algo mais

Enviado: 13 Abr 2017 20:29
por JoséQuintas
Talvez a getsys do Clipper 5.3 já tenha isso, ou alguma getsys do Harbour.
Eu mostrei as alterações que fiz, então é pegar uma getsys mais adequada e acrescentar o que achar interessante.

Dei uma olhada no Harbour e tem 2.

getsys.prg
getsys53.prg

Inclusive a do Harbour é classe.
Talvez seja possivel aplicar herança ou algo assim.

Eu bloqueio salto de mouse, porque pode ter um valor que depende de outro, ou cálculo entre os gets.

GETSYS pra multithread e algo mais

Enviado: 13 Abr 2017 20:36
por JoséQuintas
Uma coisa que tinha no VB6, era o GET com a propriedade/método Validate.

E lembrando disso, talvez dê pra aproveitar algo parecido no Harbour, mas é perigoso se tiver cálculo ou algo mais.

Imagine os gets com valid... e no final dos gets algo parecido com isto:
Apenas exemplo teórico, não contém os nomes corretos

Código: Selecionar todos

lExit := .F.
DO WHILE ! lExit
   READ SAVE
   IF LastKey() == K_ESC
      EXIT
   ENDIF
   lExit := .T.
   FOR EACH oGet IN GetList
      IF ! oGet:Validate()
        lExit := .F.
         oGet:SetPos()
         EXIT
      ENDIF
   NEXT
ENDDO
CLEAR GETS
Isso além de validar tudo no final, posicionaria no campo a ser corrigido, até que tudo passe na validação.
Tudo depende do que as validações fizerem de adicional....
Talvez até dentro da própria getsys fosse melhor.

No VB6 eu tinha a opção de usar Validate() e LostFocus().
Isso ajudava a distribuir o que podia ou não entre as duas. Validate() só validar, LostFocus() o que fazer ao sair do "get".

No VB5 não existia o Validate(), já dá pra imaginar o que acontecia... rs... inclusive travar.... rs... não cheguei a usá-lo.

GETSYS pra multithread e algo mais

Enviado: 13 Abr 2017 21:32
por asimoes
Quintas, poderia também validar tudo no final e fazer o setfocus onde a validação retorne .f., é só uma ideia.

GETSYS pra multithread e algo mais

Enviado: 13 Abr 2017 22:39
por JoséQuintas
Justamente, essa seria a idéia desta parte:

Código: Selecionar todos

IF ! oGet:Validate()
        lExit := .F.
         oGet:SetPos()
Mas acho que pra isso funcionar teria que estar dentro da getsys, não sei se o READ SAVE é suficiente.
Lembrando que READ SAVE faz o READ, mas deixa toda a getlist pendente, até o CLEAR GETS.