Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-07-2008
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 18
MON___ Va por buen camino
¿Por qué no se me abre el DIALOGBOX?

En un "TBitBtn" de la "Form" principal llamo a una función que debe abrir una ventana modal, mediante el API de Windows (DialogBox). La función requiere (entre otros parámetros) el HANDLE de la ventana que hace la llamada (en este caso, Form3->Handle), pero no se me muestra el cuadro de diálogo definido en el archivo de recursos correspondiente.
¿Alguién me puede indicar dónde tengo el error? Os transcribo el código fuente, tanto el del archivo de recursos como el de la implementación de la función.

Tengo el siguiente "resource.h"
Código:
#define DLG_BUSCAR 101
#define BTN_ACEPTAR 102
#define BTN_CANCELAR 103
#define LABEL_FIJO 104
#define COMBO_BUSCAR 105
En el *.rc correspondiente:
Código:
DLG_BUSCAR DIALOGEX 0, 0, 237, 79
STYLE DS_SYSMODAL | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_CAPTION
CAPTION "Buscar"
FONT 8, "MS Shell Dlg"
BEGIN
    LTEXT           "Valor de búsqueda:",LABEL_FIJO,7,10,63,8
    COMBOBOX        COMBO_BUSCAR,7,22,222,30,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
    PUSHBUTTON      "&Aceptar",BTN_ACEPTAR,109,54,58,14,WS_DISABLED
    PUSHBUTTON      "&Cancelar",BTN_CANCELAR,171,54,58,14
END
En "buscar.h" (declaración de la función)
Código:
#include <windows.h>
#include "resource.h"
bool BuscarValor(HWND hwnd, char * buffer, unsigned int size, bool upper);
Y en la implementación (buscar.cpp)
Código:
#include "buscar.h"
char * str;
HWND hwndCOMBO;
LRESULT CALLBACK WndProcedure(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam);
//-----------------------------------------------------------------------------------

bool BuscarValor(HWND hwnd, char * buffer, unsigned int size, bool upper)
{
    if(NULL == buffer) buffer = new char[size + 1];
    str = buffer;
    DialogBox(NULL, MAKEINTRESOURCE(DLG_BUSCAR), hwnd, reinterpret_cast<DLGPROC>(WndProcedure));
    return FALSE;
}

LRESULT CALLBACK WndProcedure(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    switch(Msg)
    {
        case WM_INITDIALOG:
            hwndCOMBO = GetDlgItem(hwnd, COMBO_BUSCAR);
            return TRUE;
        case WM_COMMAND:
            switch(wParam)
            {
                case BTN_ACEPTAR:
                    EndDialog(hwnd, 0);
                    return TRUE;
                case BTN_CANCELAR:
                    EndDialog(hwnd, 0);
                    return FALSE;
            }
    }
    return FALSE;
}
Gracias y saludos a todos

Última edición por MON___ fecha: 30-07-2008 a las 21:35:59.
Responder Con Cita
  #2  
Antiguo 30-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, ¿y como llamas a BuscarValor?

Última edición por coso fecha: 30-07-2008 a las 20:24:40.
Responder Con Cita
  #3  
Antiguo 30-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
No estoy muy seguro, pues no uso esta funcion de DialogBox pero leyendo esto , ¿donde pone NULL no deberia ser el handle de la aplicación? dicho de otra manera, ¿tiene la funcion donde buscar el recurso DLG_BUSCAR? y otra cosa, ¿con el mensaje INIT_DIALOG no se deberia mostrar 'manualmente' la ventana?
Responder Con Cita
  #4  
Antiguo 30-07-2008
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 18
MON___ Va por buen camino
Cita:
Empezado por coso Ver Mensaje
No estoy muy seguro, pues no uso esta funcion de DialogBox pero leyendo esto , ¿donde pone NULL no deberia ser el handle de la aplicación? dicho de otra manera, ¿tiene la funcion donde buscar el recurso DLG_BUSCAR? y otra cosa, ¿con el mensaje INIT_DIALOG no se deberia mostrar 'manualmente' la ventana?
Gracias por tu respuesta.
He probado tanto con NULL como con el HANDLE de la aplicación y el resultado es el mismo.
Por otra parte, el mensaje WM_INITDIALOG me sirve (en este caso) para cargar en el COMBO una serie de items mediante SendMessage(handle_del_combo, CB_ADDSTRING, 0, LPARAM(texto)). También sirve para definir el aspecto que mostrarán otros controles.
No sé si con esto te refieres a mostrar "manualmente" la ventana.

Repito, muchas gracias por tu respuesta
Responder Con Cita
  #5  
Antiguo 30-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
me refiero...si sobreescribes el mensaje init_dialog, no deberas poner un visible = true o algo para que muestre el dialogo?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No abre el ejecutable Viky Conexión con bases de datos 1 04-05-2006 16:33:35
No abre Kylix ahkimpech Lazarus, FreePascal, Kylix, etc. 8 30-07-2005 06:07:53
win98se no abre *.hlp lemon-club Varios 0 29-12-2003 13:51:57
Se abre el telon aom Humor 3 09-11-2003 09:36:58
No abre las tablas en XP ... ingel SQL 0 13-06-2003 18:12:06


La franja horaria es GMT +2. Ahora son las 08:05:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi