Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Arrastar formulario, y hacer click con segundo boton

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Arrastar formulario, y hacer click con segundo boton Responder citando

HOla!!!, vi su codigo de ejemplo para arrastrar un formulario desde cualquier parte del mismo, pero hace esto, el click lo recibe y lo manda como si lo hiciera en la parte de arriba, y listo, peor el problema es cuando hago click con el boton derecho(pues tengo un menú popup), pues lo manda a lo de arriba, y no sale el menú, diganme como le hago para que salga este dichoso menú, sinq uitar la cualidad de que se peuda arrastrar el formulario desde su cuerpo(el formulario que tengo tiene una imagen que le hace una especie de skin)
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola, yo lo he hecho usando este codigo de _Leo:

Código:

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    BitmapToRgn(this, Image1);
}
//---------------------------------------------------------------------------

/// Permite arrastrar el form pulsando el botón izquierdo
//    sobre cualquier parte del mismo
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if ( Button == mbLeft )
    {
        ReleaseCapture();
        Perform( WM_SYSCOMMAND, 0xF012, 0 );
    }
}
//---------------------------------------------------------------------------

/// Da al form la forma del bitmap dado, usando como color
//    transparente el de la esquina inferior izquierda
void __fastcall TForm1::BitmapToRgn(TForm *form, TImage *img)
{
    form->BorderStyle = bsNone;

    Graphics::TBitmap *bmp =
        dynamic_cast< Graphics::TBitmap* >( img->Picture->Bitmap );
    bmp->HandleType = bmDIB;
    bmp->PixelFormat = pf32bit;
    form->SetBounds( form->Left, form->Top, bmp->Width, bmp->Height );
    img->SetBounds( 0, 0, bmp->Width, bmp->Height );
    form->Brush->Bitmap = bmp;

    DWORD colorTransparente =
        static_cast< DWORD* >( bmp->ScanLine[bmp->Height-1] )[0];
    HRGN rgn = CreateRectRgn( 0, 0, form->Width, form->Height );
    HRGN rgnTemp = CreateRectRgn( 0, 0, form->Width, form->Height );
    CombineRgn( rgn, rgn, rgnTemp, RGN_DIFF );
    DeleteObject( rgnTemp );
    for (int y=0; y < form->Height; ++y)
    {
        DWORD *pixel = static_cast< DWORD* >( bmp->ScanLine[y] );
        int ancho = 0;

        for (int x=0; x <= form->Width; ++x)
        {
            if ( x != form->Width && pixel[x] != colorTransparente )
                ancho++;
            else
                if ( ancho > 0 )
                {
                    rgnTemp = CreateRectRgn( x - ancho, y, x, y + 1 );
                    CombineRgn( rgn, rgn, rgnTemp, RGN_OR );
                    DeleteObject( rgnTemp );
                    ancho = 0;
                }
        }
    }
    SetWindowRgn( form->Handle, rgn, true );
    DeleteObject( rgn );
}
//---------------------------------------------------------------------------

/// Cierra el form
void __fastcall TForm1::btnCerrarClick(TObject *Sender)
{
    Close();
}
//---------------------------------------------------------------------------


Solo he asignado el PopupMenu al TImage que contiene la imagen para el "Skin"... y no me da ningun problema...

El mensaje completo de _Leo esta AQUI, donde ademas pone un zip para que te descargues el proyecto de ejemplo...

Espero te sirva y soluciones tu problema...
Saludos!!!!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.