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 25-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
¿Puntero a objeto asignando su handle?

imaginen que tengo un tedit llamado ed1 y hago TEdit ed2 = new *TEdit; y luego ed2->Handle = ed1->Handle; si hago ed->Text = "hola"; ¿Que padaria? ¿Apareceria eñ texto en ambos? Es que necesito acceder a los metodos de un objeto del cual solo tengo su hwnd y es lo unico que se me ocurre.
Responder Con Cita
  #2  
Antiguo 25-12-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.198
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No puedes asignar un TEdit::Handle a otro TEdit pues es de solo lectura. Yo haría algo como esto:
Código PHP:
TEdit= (TEdit*)FindControl(Edit1->Handle);
E->Text "Hola"

Saludos.
Responder Con Cita
  #3  
Antiguo 26-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
interesante. Tengo que probarlo y ya os cuento.
Responder Con Cita
  #4  
Antiguo 26-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
tengo una duda al respecto. El componente funciona desde un ocx que vale para varios programas (entre ellos delphi, c++builder, o Visual basic). El componente se usa en una aplicacion en VB donde yo injertaria codigo para que cargue mi dll y para que ejecute mi funcion de la dll. Si hago en la funcion de mi dll uso de FindWindow, y FindWindowEx obtendria un hwnd del componente y, si pongo lo que dices para asignar el objeto a mi puntero ¿Crees que funcionaria o al ser plataformas diferentes podria tener problemas? Uso el mismo ocx tanto para la aplicacion como para la dll.
Responder Con Cita
  #5  
Antiguo 26-12-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
¿Te refieres a qué pasará si usas el código sugerido por Escafandra para obtener un control creado por VB? Pues creo que la única forma de saberlo es intentándolo. Aun así, es posible que falle ya que la descripción de la clase contenedora en VB diferirá del de la clase contenedora en Builder. Claro que quizá la función FindControl sea capaz de lidiar con ello, ya que el Handle es suficiente para controlar cualquier control.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 26-12-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.198
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Como dice Ñuño Martínez lo esperable es que falle. Mejor intenta informarte del componente de VB, para manejarlo desde la API de Windows en la medida que sea posible.

Saludos.
Responder Con Cita
  #7  
Antiguo 26-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 12
aguml Va por buen camino
Lo he probado en un ejemplo creado por mi y no me funciona. Tengo esto:

App:
Código PHP:
void __fastcall TForm1::AddDll()
{
   
//cargamos la Dll
   
Dll=LoadLibrary("DllSaveImageEdited.dll");
   if(!
Dll){
      
ShowMessage("No se encontró la Dll: DllSaveImageEdited.dll");
   }else{
      
//buscamos la funcion en la dll
      
Funcion = (LPFuncion)GetProcAddress(Dll"SaveImageEdited");
      if(!
Funcion){
         
ShowMessage("ERROR, no se encontró la función: SaveImageEdited");
      }else{
         
Funcion();//Ejecutamos la funcion de la dll

         
ButtonDesinstalarDll->Enabled true;
         
ButtonInyectarDll->Enabled false;
      }
   }

Dll:
Código PHP:
#include <windows.h>
#include "C:\\Archivos de programa\\Borland\\CBuilder6\\Imports\\AddFlow5Lib_OCX.h"
//---------------------------------------------------------------------------

#pragma argsused

/*******************************************************/
/*FUNCIÓN PARA INSTALAR/DESINSTALAR EL HOOK DEL TECLADO*/
/*******************************************************/
extern "C" __declspec(dllexport__stdcall int SaveImageEdited(void)
{
   
int retval;

   try
   {
      
//Para la prueba
      
HWND hwnd FindWindow("TForm1""Form1");
      
hwnd FindWindowEx(hwndNULL"AfxOleControl42"NULL);

      
//Obtengo un puntero a dicho componente con su handle
      
TAddFlowpaf = (TAddFlow*)FindControl(hwnd); 
      
      if(
paf!=NULL) {
         
paf->SaveImage(afTypeMediumFileafWMFWideString("\\DiagramaEditado.wmf"));
         
retval 0;
      }else{
         
MessageBoxA(NULL,"El puntero no es válido.""Error"MB_OK MB_ICONERROR);
         
retval = -2;
      }
   }
   catch(...)
   {
      
retval = -1;
   }
   return 
retval;
}
//---------------------------------------------------------------------------

int WINAPI DllEntryPoint(HINSTANCE hinstunsigned long reasonvoidlpReserved)
{
   return 
1;
}
//--------------------------------------------------------------------------- 
El control es de clase "AfxOleControl42" y consigo su hwnd sin problemas pero FindControl retorna 0, o sea que no me devuelve la direccion y por tanto se muestra el mensaje de que el puntero no es valido.
¿que puede estar fallando? ya digo que es una prueba que hice en C++builder tanto la app como la dll.

En la aplicacion el componente se declara:
Código PHP:
TAddFlow *AddFlow1
Responder Con Cita
  #8  
Antiguo 26-12-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.198
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Quizás con FindComponent...

Saludos.
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
Handle de objetos juank1971 OOP 2 09-06-2012 19:10:54
Asignando procedemientos a eventos. yapt Lazarus, FreePascal, Kylix, etc. 2 28-05-2010 12:23:11
TComponent y Handle ixMike OOP 5 12-10-2007 13:45:52
Problemas asignando passwords a usuarios kman Varios 2 16-07-2006 20:53:16
Obtener Handle de un objeto senpiterno Varios 6 22-04-2004 15:21:40


La franja horaria es GMT +2. Ahora son las 03:24:02.


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