FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Diálogo con barra de botones
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Diálogo con barra de botones
Posted: Wed Nov 25, 2009 03:08 PM
Hola compañeros,

¿Es posible crear un diálogo con barras de botones?. Yo tengo el siguiente código pero me dá erro:

Code (fw): Select all Collapse
#include "FiveWin.ch"

//----------------------------------------------------------------------------//

function Main()

   local oDlg, lExit := .f., oBtn, oBar

   DEFINE DIALOG oDlg FROM 5, 5 TO 15, 40 TITLE "A Dialog Box"
 
   DEFINE BUTTONBAR oBar OF oDlg

   ACTIVATE DIALOG oDlg VALID lExit

return nil

//----------------------------------------------------------------------------//



Error description: Error FiveWin/6 Cannot create window or control:
Class: TBAR
Caption:
System Error: No se puede crear una ventana secundaria de primer nivel.


Stack Calls
===========
Called from: .\source\classes\WINDOW.PRG => WNDCREATEERROR(0)
Called from: .\source\classes\WINDOW.PRG => TBAR:CREATE(0)
Called from: .\source\classes\BAR.PRG => TBAR:NEW(0)
Called from: C:\FWH\samples\dlg.prg => MAIN(11)


La línea 11 es la de definición de la barra de botones. No quería usar ventanas porque me lío bastante y esta diálogo sería llamado desde otro diálogo y no quedaría muy "ético", no?.

Saludos!
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Diálogo con barra de botones
Posted: Wed Nov 25, 2009 06:07 PM

Hola, prueba así a ver que pasa:

function Main()
local oDlg, lExit := .f.

DEFINE DIALOG oDlg FROM 5, 5 TO 15, 40 TITLE "A Dialog Box"

ACTIVATE DIALOG oDlg VALID lExit ;
ON INIT DlgBar(oDlg)

return nil

//---------------------//
function DlgBar(oDlg)
local oBar
DEFINE BUTTONBAR oBar 3D SIZE 30,30 OF oDlg
DEFINE BUTTON RESOURCE "imprimir" OF oBar NOBORDER ;
MESSAGE "Emision de Reportes" ACTION Msginfo("Imprimir") TOOLTIP "Reportes"
DEFINE BUTTON RESOURCE "Exit" OF oBar NOBORDER ;
MESSAGE "Finalizar esta sesion" ACTION oDlg:End() TOOLTIP "Finalizar"
SET MESSAGE OF oDlg TO "MI MENSAJE"
return nil

Saludos.

Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Diálogo con barra de botones
Posted: Wed Nov 25, 2009 06:49 PM

Francisco,

Funciona a la perfección... pero por sabemos por qué tiene que ser desde la cláusula ON INIT? no debería hacerlo igualmente de la forma que yo lo codificaba?

MUCHAS GRACIAS!

Saludos!

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Diálogo con barra de botones
Posted: Wed Nov 25, 2009 07:31 PM

David,

La diferencia viene de que una ventana crea su handle de ventana (hWnd) desde el momento que se crea con DEFINE WINDOW pero un diálogo no posee un hWnd válido hasta que no se activa usando ACTIVATE DIALOG.

Esta diferencia es propia del API de Windows, de cómo ha sido diseñado.

La diferencia en la Clase TBar es que es una clase que contiene controles hijos. Podriamos modificar la Clase TBar para que se crease como otro control de una caja de diálogo, pero cuando se inicializase desde la inicialización del diálogo, no sabrá que contiene, ni como crear cada uno de sus controles hijos.

De momento es preferible esa solución que Francisco te ha mostrado :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 199
Joined: Tue Apr 22, 2008 09:54 AM
Re: Diálogo con barra de botones
Posted: Thu Nov 26, 2009 07:13 AM

Antonio,

Gracias por la explicación. Se me hacía bastante curioso y ahora que sé el motivo, se me hace más curioso aún :) . Sabremos vivir con ello! pero es raro, raro, raro! lo que a veces hace Microsoft :D

Gracias! un saludo!

Continue the discussion