Capturar o Nome da Impressora em Minigui

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Capturar o Nome da Impressora em Minigui

Mensagem por Cavalo Marinho »

Boa tarde pessoal, aqui estou eu a solicitar uma aula dos mestres,
Em modo console eu fazia uma função onde exibia um achoice com o nome das impressoras instaladas, escolhia uma e retornava o nome da mesma como no código a seguir:

Código: Selecionar todos

********************************
Function CapturaImpressora()
********************************
local OPC_IMP := getPrinters() ,;
	  ENF_IMP[len(OPC_IMP)]    ,;
	  SEL_IMP[len(OPC_IMP)]

LIN_FIM := len(OPC_IMP) + 6
if(LIN_FIM > 22)
	   LIM_FIM := 22
endif

afill(SEL_IMP, .T.)

Limpa(4)
CODIFICAR := space(1)
setcolor(COR_NORMAL)
While (.T.)
   QPRINT := FazMenu(05, 05, LIN_FIM, 38, len(OPC_IMP), OPC_IMP, SEL_IMP, ;
					, QPRINT, "Selecione Impressora. <Esc>-Retorna")
   If (LastKey() == _ESC_)
	  clear typeahead
	  SetColor(COR_ANT)
	  restscreen(04, 01, 24, 79, TELA_ANT)
	  return ""
   EndIf
   exit
enddo
return(OPC_IMP[QPRINT])
Onde a função FazMenu() me retorna o numero da opção escolhida assim eu tenho como saber qual o elemento da vetor OPC_IMP que armazena o nome da Impressora, funciona 100%, meu problema é em modo visual como fazer para implementar uma função onde eu monto um formulário que tem um comboBox com o nome das impressoras, botão Imprimir e Cancelar (Tudo já implementado) e se eu escolher o botão cancelar me retorna o nome da impressora vazio, se escolher o botão Imprimir me retornar o nome da impressora escolhida no combobox.
Estou postando a tela de seleção da impressora para os srs. terem uma ideia do que estou querendo. Ainda estou engatinhado em modo visual e tenho muitas dificuldades.
Sendo mais especifico:
nomeImpressora := SelecionaImpressora()
Onde selecionaImpressora() Exibiria o formulário (tela Postada) e retornaria o nome da impressora escolhida.
telaImpressao.png
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Capturar o Nome da Impressora em Minigui

Mensagem por Cavalo Marinho »

Bom dia pessoal
Depois de algumas pesquisas e tentativas consegui solucionar o meu problema e disponibilizo aqui para quem tiver a mesma necessidade que passei.
É só fazer a chamada no seu programa fonte deste jeito:
nomeDaImpressora := CapturaImpressora()
Daí em diante você pode tratar o nome para tomar decisões no fluxo do seu programa, eu necessitava disso para decidir se imprimia para uma Argox ou para outra qualquer.

Código: Selecionar todos

#include "minigui.ch" 
#include "miniprint.ch" 

*******************************
Function CapturaImpressora()
*******************************
cClickedBut := ""
cNomeImpressora := ""

aPrinters := impressoras()

DEFINE WINDOW frmImpressora ;
     AT 331 , 530 	;
	 WIDTH 570 		;
	 HEIGHT 286 	;
	 TITLE "Selecionar Impressora" ;
	 MODAL 			;
	 ON RELEASE {|| SetaImp(ThisWindow.Name, "cbImpressoras", frmImpressora.cbImpressoras.value)};
	 NOSIZE 		;
	 NOSYSMENU 		
	  

     DEFINE FRAME Frame_1 
            ROW    20
            COL    10
            WIDTH  531
            HEIGHT 163
            FONTNAME 'Arial'
            FONTSIZE 10
            FONTBOLD .T.
            CAPTION "Impressoras Instaladas"
            OPAQUE .T.
     END FRAME  

     DEFINE COMBOBOX cbImpressoras 
            ROW    40
            COL    20
            WIDTH  512
            HEIGHT 135
            ITEMS aPrinters[1]
            VALUE aPrinters[3]
            FONTNAME 'Arial'
            FONTSIZE 10
            TOOLTIP ''
     END COMBOBOX  

     DEFINE BUTTONEX btnOk 
            ROW    190
            COL    140
            WIDTH  120
            HEIGHT 35
            CAPTION "Ok"
            PICTURE "D:\fenix\imagens\OK1.bmp"
            ICON NIL
            ACTION (cClickedBut := This.Name , ThisWindow.release)
            FONTNAME 'Arial'
            FONTSIZE 10
            FONTBOLD .T.
            LEFTTEXT .T.
            TOOLTIP ''
            DEFAULT .T.
     END BUTTONEX  

     DEFINE BUTTONEX btnCancelar 
            ROW    190
            COL    300
            WIDTH  120
            HEIGHT 35
            CAPTION "Cancelar"
            PICTURE "D:\fenix\imagens\cancelar16.bmp"
            ICON NIL
            ACTION (cClickedBut := This.Name , ThisWindow.release)
            FONTNAME 'Arial'
            FONTSIZE 10
            FONTBOLD .T.
            LEFTTEXT .T.
            TOOLTIP ''
     END BUTTONEX  

END WINDOW

frmImpressora.center
frmImpressora.activate 
 
return(cNomeImpressora)	  

*****************************************************
Static Function SetaImp(cFormu, cControle, valor) 
*****************************************************
cImp := getProperty(cFormu, cControle, "Item", valor)
if(cClickedBut == "btnOk")
	cNomeImpressora := cImp
else
	cNomeImpressora := ""
endif

****************************
Function Impressoras()
****************************
Local aIMP1,aIMP2,aIMP3

aIMP1:=aPrinters()
ASORT(aIMP1,,, { |x, y| UPPER(x) < UPPER(y) })
aIMP2:=GetDefaultPrinter()
aIMP3:=ASCAN(aIMP1, {|aVal| aVal == aIMP2})

RETURN {aIMP1,aIMP2,aIMP3} 
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Capturar o Nome da Impressora em Minigui

Mensagem por Toledo »

Amigo, uma outra opção seria usar a função GetPrinter(), veja um exemplo:

Código: Selecionar todos

#include "minigui.ch"
Function main()

SET LANGUAGE TO PORTUGUESE

DEFINE WINDOW FMain AT 10,10 ;
	WIDTH 550 HEIGHT 185 MAIN ;
	TITLE "Demo Escolher Impressora" ;
	NOMAXIMIZE NOSIZE

      @ 30,50 BUTTON Button_1 CAPTION "Escolher Impressora" WIDTH 150 HEIGHT 28;
              ACTION {|| Escolhe_Imp()}

END WINDOW

FMain.Center
FMain.Activate
Return Nil
   
*-----------------------
Function Escolhe_Imp()
*-----------------------
Local cNomeImp:=GetPrinter()
If !empt(cNomeImp)
  MsgInfo("Impressora escolhida:"+CRLF+cNomeImp)
else
  MsgInfo("Cancelou a escolha")
endif
Return NIL
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Capturar o Nome da Impressora em Minigui

Mensagem por Cavalo Marinho »

Boa tarde Toledo
Eu vi a função getprinter e até comecei a utilizar, mas não temos como personalizar o visual, sem contar que a partir deste código podemos receber mais retornos, a exemplo estou refatorando o mesmo para receber uma matriz com alguns dados necessários, por exemplo posso colocar um checkbox para me informar se eu quero um preview ou não. assim teria
retImpressora := CapturaImpressora()
onde
retImpressora[1] := nome da impressora
retImpressora[2] := preview
e assim melhorar a funcionalidade, fica a cargo de cada necessidade, este código só foi a pedra fundamental.

Obrigado por responder o post.
Responder