Página 1 de 1

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 13 Abr 2017 15:10
por rubens
Olá Boa tarde...

Para uma confirmação com o Wapi_MessageBox() basta usar?

Código: Selecionar todos

wapi_MessageBox( wapi_GetActiveWindow(), cText, "Confirmação", WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2 ) == IDYES
Tem como eu mudar o texto dos botões, SIM/NAO, para Impressora/Tela ?

Obrigado Rubens

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 13 Abr 2017 21:05
por JoséQuintas
Eu ficava imaginando como iria limpar minha aparelhagem de som... e não limpava....
Hoje veio a faxineira e limpou com esponja e sabão e ficou resolvido.

Caso não encontre outra opção:
vb1.png
Usei a IDE do VB6, pra não ter que procurar os #includes no Harbour, e já ver o que há disponível.
A IDE do VB6 mostra automático, conforme o que puder ser usado.
vb2.png
No caso do Harbour será procurar o #define equivalente.

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 14 Abr 2017 15:37
por Claudio Soto
Los botones de los MessageBox de Windows no se pueden cambiar, hay que utilizar los predefinidos.

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 14 Abr 2017 19:53
por asimoes
Rubens, seria algo como isso:
Screen Shot 04-14-17 at 07.52 PM.PNG
Screen Shot 04-14-17 at 07.52 PM.PNG (6.43 KiB) Exibido 2495 vezes

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 14 Abr 2017 20:00
por asimoes
O código que troca o texto padrão dos botões está na pasta \MiniGUI\SAMPLES\Advanced\MsgBtnEx

Eu não consegui foi passar o parâmetro com o nome dos textos Impressora e Tela, está informado na função CBTProc (código C )

Aqui troca os textos padrão do botões:


hwndButton = GetDlgItem(hwnd, IDYES);
SetWindowText(hwndButton, "Impressora");

hwndButton = GetDlgItem(hwnd, IDNO);
SetWindowText(hwndButton, "Tela");

Teria que ver uma forma de ser passado como parâmetro.

Código: Selecionar todos

/*
 * MINIGUI - Harbour Win32 GUI library
 *
 * Copyright 2002-05 Roberto Lopez <harbourminigui@gmail.com>
 * http://harbourminigui.googlepages.com/
 *
 * Copyright 2005 Grigory Filatov <gfilatov@inbox.ru>
*/

ANNOUNCE RDDSYS

#include "minigui.ch"
#include "hbwin.ch"

#define PROGRAM 'MsgBtnEx Demo'
#define VERSION ' version 1.0'
#define COPYRIGHT ' 2005 Grigory Filatov'

#define MB_OK                   0
#define MB_ICONSTOP             16
#define MB_ICONQUESTION         32
#define MB_ICONEXCLAMATION      48
#define MB_ICONINFORMATION      64
#define MB_ICONINFORMATION      64
*--------------------------------------------------------*
Function Main
*--------------------------------------------------------*

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 640 HEIGHT 480 ;
		TITLE PROGRAM ;
		ICON 'DEMO.ICO' ;
		MAIN ;
		FONT 'Arial' SIZE 10 

		DEFINE STATUSBAR
			STATUSITEM '[x] Harbour Power Ready!' 
		END STATUSBAR

		DEFINE MAIN MENU 
			POPUP '&MsgBtnEx'
				ITEM 'Message Information'	ACTION	{|| MsgBtnEx(MiniguiVersion(), ;
				StrTran(Form_1.Title, "Demo", "Information"), MB_ICONINFORMATION + MB_OK), MsgInfo("Ok", "Information") }
				ITEM 'Message Question'		ACTION	{|| MsgBtnEx(MiniguiVersion(), ;
				StrTran(Form_1.Title, "Demo", "Question"), MB_ICONQUESTION + MB_OK) }
				ITEM 'Message Stop'		ACTION	MsgBtnEx(MiniguiVersion(), ;
					StrTran(Form_1.Title, "Demo", "Stop"), MB_ICONSTOP + MB_OK)
				ITEM 'Message Error'		ACTION	MsgBtnEx(MiniguiVersion(), ;
					StrTran(Form_1.Title, "Demo", "Error"), MB_ICONEXCLAMATION + MB_OK)
				ITEM 'Message Yes No'		ACTION	MsgBtnEx(MiniguiVersion(), ;
					StrTran(Form_1.Title, "Demo", "Impressora"), WIN_MB_YESNO + WIN_MB_ICONQUESTION + WIN_MB_DEFBUTTON2 )					
			    	SEPARATOR	
				ITEM '&Exit'	ACTION Form_1.Release
			END POPUP
			POPUP '&Help'
				ITEM '&About'	ACTION MsgBtnEx( PROGRAM + VERSION, ;
					'About', MB_ICONINFORMATION + MB_OK )
			END POPUP
		END MENU

	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return Nil


#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"


HHOOK hMsgBoxHook;

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam )
{
	HWND hwnd;
	HWND hwndButton;

	if(nCode < 0)
		return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);

	switch(nCode)
	{
	case HCBT_ACTIVATE:

		// Get handle to the message box!
		hwnd = (HWND)wParam;

		hwndButton = GetDlgItem(hwnd, IDOK);
		SetWindowText(hwndButton, "Thank you");
		
		hwndButton = GetDlgItem(hwnd, IDYES);
		SetWindowText(hwndButton, "Impressora");

		hwndButton = GetDlgItem(hwnd, IDNO);
		SetWindowText(hwndButton, "Tela");

		return 0;

	}
          
	return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
}

int MsgBoxHook(HWND hwnd, const char *szText1, const char *szCaption, UINT uType)
{
	int retval;
	HWND hwndButton;

	// Install a window hook, so we can intercept the message-box
	// creation, and customize it
	hMsgBoxHook = SetWindowsHookEx(
		WH_CBT, 
		CBTProc, 
		NULL, 
		GetCurrentThreadId()			// Only install for THIS thread!!!
		);

	// Display a standard message box
	
	retval = MessageBox(hwnd, szText1, szCaption, uType);


	// remove the window hook
	UnhookWindowsHookEx(hMsgBoxHook);

	return retval;
}

HB_FUNC ( MSGBTNEX )
{
	MsgBoxHook(NULL, hb_parc(1), hb_parc(2), hb_parnl(3) );
}

#pragma ENDDUMP


Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 14 Abr 2017 20:17
por asimoes
Ops, foi mal, postei no fórum errado

Rubens se for algo relacionado a MiniGui tem um exemplo na pasta \MiniGUI\SAMPLES\BASIC\MsgEdit que atende o que você quer.
Esse código em C você pode usar mesmo que não seja com a minigui

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 14 Abr 2017 21:58
por asimoes
Off topic,

Aproveitando a ideia fiz no meu sistema, o texto da caixa pode ser qq um
Screen Shot 04-14-17 at 09.57 PM.PNG

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 15 Abr 2017 18:00
por rubens
ASimoes...

O Toledo tinha me apresentado algo parecido aqui nesse tópico: https://pctoledo.org/forum/viewto ... 45&t=17885
Só que é para Minigui...
Tô só passando um batom aqui no harbour (não estou querendo implementando mais nada em console, se for uma rotina maior, faço um exe externo, até tá tudo em janela na minigui). Daí uso do jeito que o Quintas falou associando uma opção ao SIM, NÃO e CANCELAR. Mas não fica lá muito chique... mas é remendo então vai ficando...

Obrigado
Rubens

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 16 Abr 2017 17:06
por JoséQuintas
Só pra lembrar: se não for GUI, pode ser mais interessante algo neste estilo:
selecao.png
O usuário pode clicar com mouse, usar setas, teclar letra, etc.
O mesmo clique que o usuário faria na seleção Windows, faria nesta.

Ou... misturar LIBs e usar a rotina postada em hwgui... rs

Aliás.... se tiver preview de impressão, basta sempre enviar pra tela, e o usuário decide depois se imprime, e o sim ou não acaba resolvendo.... rs

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 16 Abr 2017 17:14
por JoséQuintas
Minha opção matricial direciona a este preview.
Isso dipensa opção vídeo/impressora.
preview.png
Nesse preview funciona clique e até rodinha do mouse, melhor do que criar uma opção somente tela.
Pode ser visual texto, mas o usuário não sente falta do que uma GUI poderia oferecer - talvez o ZOOM, que ainda não tem.... rs

Mas nesse caso ele poderia usar a opção PDF, e abrir o leitor default, do Windows 10 por exemplo.
preview2.png
Isso de vídeo ou impressora acaba se tornando algo do passado.... rs

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 16 Abr 2017 17:47
por JoséQuintas
Só complemento:
Se você tem uma rotina pra vídeo, e outra pra impressora, desse jeito elimina a de vídeo, e tem menos trabalho pra manutenção depois.
É apenas sugestão.
Tinha isso num aplicativo que venho alterando, e era complicado mexer em duas rotinas pra poder ter vídeo e impressora.

E quando alterar pra LIB gráfica, vai ser só trocar o módulo de preview.

Pode ser até mais fácil do que encontrar a solução pra mensagem.
A mensagem vira problema do passado, e vai estar trabalhando para o futuro.

É assim que eu faço, por isso não me preocupo tanto com GUI, por exemplo basta uma única rotina de preview pra alterar todo aplicativo de uma vez.
É como se o aplicativo estivesse sempre pronto pra GUI, só esperando a escolha de qual GUI usar...

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 16 Abr 2017 21:28
por asimoes
Os relatórios dos meus sistemas são sempre exibidos em tela, se o o usuário quer imprimir, tem um botão no preview pra isso.

Mudar texto dos botoes da Wapi_MessageBox()

Enviado: 17 Abr 2017 14:38
por rubens
Boa tarde...

Quintas, viu essa postagem https://pctoledo.org/forum/viewto ... =4&t=18184?

Com pequenas adaptações nos relatórios, hoje não me preocupo mais com relatório em matricial e Laser/Jato/Tinta.
Relatorio2.png
Neste exemplo aí se a impressora não é matricial já gera o pdf e com um flag de visualizar na tela ou não, com o sumatra exibo o relatório (pdf) na tela. Usando os mesmo fonte nos relatórios. Com todas as características de um PDF e usando a formatação normal de um relatório Matricial com negrito, expandido e condensado. Ainda tenho que clientes que só usam matricial e tenho clientes e que só usam laser/jato e tenho clientes que usam os dois modelos... E relatórios novos estou migrando tudo para FastReports..
FastReport.png
A questão é que no sistema troquei o comando Alert pelo Wapi_Message, já fica com uma cara mais "moderna"...
Tela com Wapi_Message.png
O Negócio é que em todos os meu relatórios Tem a opção de imprimir direto na impressora ou visualizar em tela e ainda o próprio sistema escolhe se a impressão direta vai ser via PrintFileRaw o via Harupdf (Só depende da impressora escolhida). Uso uma tela padrão para isso e nela tem três opções como na figura abaixo:
TelaMudar.png
Daí hoje não vejo mais a necessidade de saída de Arquivo, porque quando visualiza já foi gerado o pdf. Daí gostaria só de uma Wapi_message box com botôes Impressora - Tela. Mas se não é possível... vai ficar do jeito que tá..

Rubens