Clipper On Line • Ver Tópico - Um pouco de Windows API

Um pouco de Windows API

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Um pouco de Windows API

Mensagempor JoséQuintas » 11 Ago 2020 10:56

Talvez isto ajude a entender um pouco o funcionamento de ambiente GUI.

Um recurso disponível pra Windows é DIALOG em RESOURCE.
Que troço doido é esse?

Acho que o dBASE tinha isso também, é definir os elementos da tela, e depois usar essa tela pronta.

RESOURCE é um arquivo texto, com "recursos" pra serem usados pelo aplicativo.
Podem ser ícones, imagens, ou qualquer outra coisa, até mesmo TELAS.

Um exemplo
#include <windows.h>

ErrorDialog DIALOG  10, 10, 300, 110
STYLE WS_POPUP | WS_BORDER
CAPTION "Error!"
{
    CTEXT "Select One:", 1, 10, 10, 280, 12
    PUSHBUTTON "&Retry", 2, 75, 30, 60, 12
    PUSHBUTTON "&Abort", 3, 75, 50, 60, 12
    PUSHBUTTON "&Ignore", 4, 75, 80, 60, 12
}


Isso indica uma tela que vai ter um texto: "Select One", e três botões pra clique, "Retry", "Abort", "Ignore"

Digamos que isso seja parecido com a GETSYS do Clipper/Harbour.
No uso disso, o aplicativo mostra essa tela, e fica em DO WHILE, testando o que acontece.

Apenas pra efeito didático, algo do tipo:

MostraEssaTela()
DO WHILE .T.
   nKey := Inkey()
   DO CASE
   CASE nKey == CLIQUE_BUTTON1
   CASE nKey == CLIQUE_BUTTON2
   CASE nKey == CLIQUE_BUTTON3
   CASE nKey == CLIQUE_TEXTO
   CASE nKey == K_ESC
      EXIT
   ENDCASE
ENDDO


Isso seria uma DIALOG, uma tela comum em ambiente GUI.
Quem mostra a tela é o Windows, e o Windows fica repassando o que acontece ao aplicativo.

Alguns aqui no fórum usam editores de resource, com recurso de desenhar telas pra resource.
Um programa, que permite desenhar telas, e salva nesse formato, para o aplicativo usar depois.
Essa tela, em formato "resource windows", é compilada e fica pronta pra uso no aplicativo.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Um pouco de Windows API

Mensagempor Itamar M. Lins Jr. » 11 Ago 2020 11:13

Ola!
Hwgui XML.
Lazarus usa XML + HASH (?).
O Delphi novo, usa isso criptografado para não migrarem para o Lazarus.

object FrmAgenda: TFrmAgenda
  Left = 388
  Height = 425
  Top = 151
  Width = 632
  Caption = 'SCI'
  ClientHeight = 425
  ClientWidth = 632
  LCLVersion = '2.0.6.0'
  object cNome: TEdit
    Left = 159
    Height = 30
    Top = 108
    Width = 257
    TabOrder = 0
  end
  object cSenha: TEdit
    Left = 159
    Height = 30
    Hint = 'Uma dica grande'
    Top = 160
    Width = 257
    TabOrder = 1
    TextHint = 'Digite a Senha'
  end
  object Button1: TButton
    Left = 200
    Height = 105
    Top = 208
    Width = 160
    Caption = 'Confirmar'
    OnClick = Button1Click
    TabOrder = 2
  end
  object Label1: TLabel
    Left = 159
    Height = 17
    Top = 88
    Width = 52
    Caption = 'Usuário:'
    ParentColor = False
  end
  object Label2: TLabel
    Left = 160
    Height = 17
    Top = 144
    Width = 42
    Caption = 'Senha:'
    ParentColor = False
  end
end


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 4611
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 161 vezes
Mens.Curtidas: 253 vezes

Um pouco de Windows API

Mensagempor JoséQuintas » 11 Ago 2020 11:13

A GTWVG tem um exemplo próximo disso, mas via fonte.

O fonte _dyndlgs.prg cria a configuração da DIALOG, executa, e depois fica no DO WHILE, aguardando que o Windows repasse o que está acontecendo na DIALOG.

No demowvg.exe, só escolher a opção no menu

test1.png


test2.png


Talvez melhor dizer que parece o TBROWSE, onde acrescentamos apenas a função de usuário, que troca informações com o tbrowse.

Em uma tela GUI, é assim que funciona, é uma DIALOG.
O programa cria toda a configuração da tela, direto ou por resource, repassa ao Windows para que a janela seja criada, e depois trabalha como uma "função de usuário" dessa janela.

Qual a diferença pra HWGUI, HMG, OOHG, etc?
Nenhuma.
Existem os controles, que entram na dialog, e existe a rotina "de usuário" que atende as dialogs.

É lógico... a "função de usuário" de cada uma está preparada para seus próprios controles, e seus próprios controles estão preparados para sua própria "função de usuário".
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Um pouco de Windows API

Mensagempor JoséQuintas » 11 Ago 2020 11:23

I
Itamar M. Lins Jr. escreveu:Hwgui XML.
Lazarus usa XML + HASH (?).
O Delphi novo, usa isso criptografado para não migrarem para o Lazarus.


Pois é, e o VB usava seu editor de telas.

Begin VB.Form FrmP0060 
   Caption         =   "P0060-Gera Texto com Todas as opções do Sistema"
   ClientHeight    =   6060
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   7635
   Icon            =   "P0060.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   ScaleHeight     =   6060
   ScaleWidth      =   7635
   StartUpPosition =   2  'CenterScreen
   Begin VB.PictureBox picToolbar
      Align           =   1  'Align Top
      Appearance      =   0  'Flat
      BackColor       =   &H00C0C0C0&
      ForeColor       =   &H80000008&
      Height          =   750
      Left            =   0
      ScaleHeight     =   720
      ScaleWidth      =   7605
      TabIndex        =   1
      TabStop         =   0   'False
      Top             =   0
      Width           =   7635
      Begin VB.CommandButton cmdSair
         BackColor       =   &H00C0C0C0&
         Caption         =   "Sair"
         CausesValidation=   0   'False
         Height          =   750
         Left            =   2520
         Style           =   1  'Graphical
         TabIndex        =   3
         Top             =   0
         Width           =   705
      End
      Begin VB.CommandButton cmdConfirma
         BackColor       =   &H00C0C0C0&
         Caption         =   "Confirma"
         CausesValidation=   0   'False
         Height          =   750
         Left            =   1575
         Style           =   1  'Graphical
         TabIndex        =   2
         Top             =   0
         Width           =   705
      End
   End
   Begin VB.TextBox TxtOpcoes
      Appearance      =   0  'Flat
      Height          =   5100
      Left            =   105
      Locked          =   -1  'True
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   0
      Top             =   840
      Width           =   7455
   End
End


Essa parte não é visível pela IDE, a não ser a tela com isso.
Isso é cada controle da tela, e as informações dele, como posição, tamanho, cores, sequência, e alguma opção a mais que o controle permitisse.

Faz muito sentido: o aplicativo não precisa saber desses detalhes, o aplicativo só precisa saber que o controle existe.
Se o button está encima, embaixo, de um lado, do outro lado.... tanto faz, para o aplicativo não importa, vai funcionar do mesmo jeito, fazendo a mesma coisa.

Cada linguagem de programação faz isso de um jeito, como deu pra ver o Delphi/Lazarus também tem parecido - não tem muito o que inventar sobre o que cada controle faz.
Da mesma forma tem na HWGUI, HMG, OOHG, etc...

É interessante isso.
É o desenho da tela, a janela DIALOG vai mostrar essas coisas do jeito que foram definidas, e o aplicativo vai ficar em DO WHILE, aguardando que o Windows avise sobre cada ocorrência de teclado/mouse.

Com certeza, isso é bem diferente de console, que vamos mostrando/apagando do jeito que queremos.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes

Um pouco de Windows API

Mensagempor JoséQuintas » 11 Ago 2020 11:47

JoséQuintas escreveu: e o aplicativo vai ficar em DO WHILE, aguardando que o Windows avise sobre cada ocorrência de teclado/mouse.


Talvez tenha faltado dar um destaque nisso.
É porque isso indica que o Windows acaba sendo parte do aplicativo.
E sendo assim, é um comportamento esperado NO WINDOWS, e não no Linux por exemplo.
A partir daí, uma LIB destinada a Linux vai ser diferente de uma LIB destinada a Windows.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 14689
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 13 vezes
Mens.Curtidas: 864 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Ahrefs [Bot] e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro