• Viernes 8 de Noviembre de 2024, 17:53

Autor Tema:  Anclar Un Form A Una Esquina  (Leído 5531 veces)

leowa

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Anclar Un Form A Una Esquina
« en: Martes 2 de Mayo de 2006, 20:21 »
0
He buscado por el foro como hacer una ventana emergente tipo msn y no he encontrado nada que pueda implementar y lo que ahora quiero hacer, pero no se como es anclar un Form a la esquina inferior derecha. He probado con la propiedad Align del Form, pero éste se "estira" en todos los casos que he probado, es decir que ocupa toda la parte de abajo en el caso de que la propiedad Align tenga el valor de alBottom.
Resumiendo, quiero que un Form esté anclado a esa esquina sin que cambie de tamaño ni pueda ser redimensionado ni movido por toda la pantalla.
Gracias y saludos.

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Anclar Un Form A Una Esquina
« Respuesta #1 en: Jueves 11 de Mayo de 2006, 21:10 »
0
Dado que no quieres que la aplicación visual no sea modificado en ningún modo quizás te sirva poner una imágen como Skin, de esa forma el formulario siempre tomará la forma de la imágen y podrás situarla en la parte que tu quieras. Si te interesa responde a este mensaje y te digo como.

Saludos!.. :hola:  :lightsabre:
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Vatoicc

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Anclar Un Form A Una Esquina
« Respuesta #2 en: Viernes 12 de Mayo de 2006, 00:57 »
0
a mi me interesa...

lo que propones es usar el componente que le da al Form el contorno de una imagen?
La paranoia es una vision mas sutil de la vida

leowa

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Anclar Un Form A Una Esquina
« Respuesta #3 en: Viernes 12 de Mayo de 2006, 12:26 »
0
x Linspire:

pues si que me interesaría la solución que me ofreces, no había pensado en ponerle una imagen como skin a la ficha que quiero poner como aviso, pero si con esa solución se puede situar donde quiera, aquí estoy, soy todo tuyo!  :whistling:  jejeje

Un saludo y gracias  B)

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Anclar Un Form A Una Esquina
« Respuesta #4 en: Viernes 12 de Mayo de 2006, 17:07 »
0
Pues que bien que te interese, ahí tienes la solución.

Esto es lo que debes poner al inicio del .cpp

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

#include <vcl.h>
#include <Clipbrd.hpp>
#pragma hdrstop
#include<ComObj.hpp>
#include<ole2.h>
#include<richole.h>
#include <memory>    //Debes incluir esta cabecera.

#include "Project.h"
#include "aboutus.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Word_2K_SRVR"
#pragma resource "*.dfm"
Tmain *main;

//Aquí inicia.

void BitmapToRgn(TForm *form, TImage *img)
{
   form->BorderStyle = bsNone;

   Graphics::TBitmap *bmp =
       dynamic_cast< Graphics::TBitmap* >( img->Picture->Bitmap );

   form->SetBounds( form->Left, form->Top, bmp->Width, bmp->Height );
   img->SetBounds( 0, 0, bmp->Width, bmp->Height );
   form->Brush->Bitmap = bmp;

   int tamanyoImagen = bmp->Width * bmp->Height * 4;
   std::auto_ptr< BITMAPINFO > lpbmi( new BITMAPINFO );
   std::auto_ptr< BYTE > bits( new BYTE[tamanyoImagen] );

   ZeroMemory( lpbmi.get(), sizeof(BITMAPINFO) );
   lpbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
   lpbmi->bmiHeader.biWidth = bmp->Width;
   lpbmi->bmiHeader.biHeight = bmp->Height;
   lpbmi->bmiHeader.biPlanes = 1;
   lpbmi->bmiHeader.biBitCount = 32;
   lpbmi->bmiHeader.biCompression = BI_RGB;
   lpbmi->bmiHeader.biSizeImage = tamanyoImagen;

   GetDIBits( bmp->Canvas->Handle, bmp->Handle, 0, bmp->Height,
       bits.get(), lpbmi.get(), DIB_RGB_COLORS );

   DWORD colorTransparente = reinterpret_cast<DWORD*>
       ( bits.get() )[ bmp->Width * (bmp->Height-1) ];

   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 < bmp->Height; ++y)
   {
       DWORD *pixel = &reinterpret_cast<DWORD*>
           ( bits.get() )[ bmp->Width * (bmp->Height - 1 - y) ];
       int ancho = 0;

       for (int x=0; x <= bmp->Width; ++x)
       {
           if ( x != bmp->Width && pixel
  • != 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 );
}

//Aquí termina.

Despues esto.

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


Y si quieres que el form se pueda mover arrastrando la imagen, entonces pon:

if ( mbLeft == Button )
        {
        ReleaseCapture();
        Perform( WM_SYSCOMMAND, 0xF012, 0 );
        }

En el evento OnMouseDown de la imagen.


Pues así de sencillo, solo debes cargar una imágen con una determinada forma en el form, ah, el formato de la imagen debe ser .bmp y debe tener un marco minimo de 1px de grueso del color que no quieres que se vea, ya que este código hace invisible el color de las esquinas de la imágen por ello debe existir ese marco para que esto pueda llevarse a cabo (espero me hayan entendido).

Una vez que hayas hecho esto tu form se verá más o menos así (bueno, eso depende de la imagen que utilices), este es un ejmplo de un programa que estoy desarrollando.



Clik aquí para ver como se ve sobre el escritorio de Windows XP

Si tienes alguna duda no dudes en preguntar.

Suerte!... :hola:  :smartass:  :lightsabre:
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Vatoicc

  • Miembro activo
  • **
  • Mensajes: 65
    • Ver Perfil
Re: Anclar Un Form A Una Esquina
« Respuesta #5 en: Viernes 12 de Mayo de 2006, 19:48 »
0
Orale.... se ve muy ingenioso... deja lo pruebo y despues te digo como me fue
La paranoia es una vision mas sutil de la vida

leowa

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Anclar Un Form A Una Esquina
« Respuesta #6 en: Viernes 12 de Mayo de 2006, 21:24 »
0
Pues muchas gracias Linspire, lo probaré a ver si hay suerte y me sale bien.

Un saludo y mil gracias

Drache

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Anclar Un Form A Una Esquina
« Respuesta #7 en: Domingo 14 de Mayo de 2006, 18:15 »
0
Hola Linspire,
Yo ya habia usado ese codigo que encontré en otra página, nose si tu lo escribistes o no, pero me parece que tiene una apariencia exelente los botones, y el combobox.
Yo he desarrollado muchos programas sencilos y he buscado darles la mejor apariencia posible, (no me gustan para nada los botones standar que trae el builder xD)

¿podrias explicarme como hicistes para poner esos botones?
¿como hicistes para personalizar el combobox? (o no sé que sea)

Bueno, yo he intentado hacer botones con buena apariencia, pero fue trasponiendo imagenes xD en una imagen en el evento de onmousemove meti que se hiciera invisible, y asi se ve la imagen de atrás, creando un efecto de movimiento.

Bueno, tambien podria ser que estes usando algun componente, cualquiera que sea platicame porfavor =D
Un saludo

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Anclar Un Form A Una Esquina
« Respuesta #8 en: Domingo 14 de Mayo de 2006, 18:39 »
0
Bueno, my friend, en realidad yo también copié  :whistling:  ese código y desconozco totalmente quien lo haya escrito(pues yo apenas soy un principiante) pero muchisimas gracias a quien lo haya hecho. Con respecto a los botones y a toda la apariencia dejáme decirte que yo también tengo algo de perfeccionista en ese sentido, lo cual cosidero una de mis cualidades (sic).

Y pues ahora, supongo que te refieres a esos botones azules que tienen la apariencia del navegador Safari de MAC, simplemente son imagenes .bmp cargadas en un SpeedButton y con la propiedad Flat a true, eso de da un toque más artistico, también podrías cargar un .bmp en un BitBtn sin poner algo en la propiedad caption, en lugar de eso escribe el texto en la imagen.

De esta forma puedes personalizar más tu aplicación. Ah, y en efecto, lo que se ve ahí es un ComboBox con una imagen en la parte de atras, es la misma imagen del Skin, y la propiedad Style=csSimple.

Espero te sirva.

Saludos!.. :D  :comp:  :lightsabre:  :whistling:
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Anclar Un Form A Una Esquina
« Respuesta #9 en: Domingo 14 de Mayo de 2006, 18:43 »
0
Si pones una imagen (.bmp) en un BitBtn se vería más o menos como en este post de un problema que tuve hace tiempo (El BitBtn es donde dice Buscar?).

Clic aquí

Saludos nuevamente.
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Drache

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Anclar Un Form A Una Esquina
« Respuesta #10 en: Domingo 14 de Mayo de 2006, 19:25 »
0
hombre... pero tu eres un artista con hobbie de programador xD

esos botones ni en sueños los dibujo yo..

he usado esta pagina:  www.cooltext.com
para hacer botones  :lol:

pero bah falta mucho para llegar a ese nivel de personalizacion  :huh:

Bueno, si no es mucho pedir, que yo creo que si es :D , me gustaria que me pasaras las imagenes que usas,
aunque claro, no es para distribuir programas copiando tus botones, sino para aprender, modificarle si puedo a las imagenes o darme ideas xD

Bueno, un saludo
mi e-mail  [email:1krk4tv0]mechanker@hotmail.com[/email:1krk4tv0]

Linspire

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
    • http://www.cedrela.com.mx
Re: Anclar Un Form A Una Esquina
« Respuesta #11 en: Domingo 14 de Mayo de 2006, 20:23 »
0
:P Jaja, gracias por el halago, y te seré sincero, en realidad no uso ningún programa en especial, solo el MSPaint, por ejemplo la imagen que adjunto simplemente la copié de esta pagina, borré los bordes y listo, puedes sustitir el texto "OK" por el que desees, lo cargas en un SpeedButton o en BitBtn y listo. La desventaja del SpeedButton es que no puede usarse la propiedad Default porque no existe, aunque ese problema puede solucionarse facilmente programano el evento OnkeyPress si se esta usando un Edit.

Y pues si te refieres a los iconos pues tengo una colección de miles de ellos que tal vez puedan servirte, solo tienes que darme tu correo y te los envío.

Saludos!.. :lightsabre:  :hola:  :whistling:  :comp:

PD. Podrías decirme que demonios significa la expresión 'xD'?, ya que supongo que la D es una sonrisa pero no logro deducir que es la x. Gracias.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
[size=109]My Blog de Programación[/i][/b][/size]
´


[size=109]Tan solo quiero pensar que todo es un sueño y que no quiero despertar
porque quiero controlarlo como yo quiera.
[/size]

Todo es posible, lo imposible solo cuesta un poco más. Dan Drown.

Drache

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Anclar Un Form A Una Esquina
« Respuesta #12 en: Domingo 14 de Mayo de 2006, 21:01 »
0
jajaja muy bueno eso de la página con imagenes xD
yo me imaginaba que tu hacias esos dibujos en corel o algo asi jeje
pero yo también me he tomado imagenes de otros lados y les edito a conveniencia

yo he usado mucho la tecnica que dices, de meterle imagenes al speedbutton y al bitbtn.

pero nunca he tenido imagenes tan buenas como las que tu usas xD

...ah si el xD

la x indica fruncir el ceño, como cuando te ries tanto que cierras los ojos, o cuando estas enojado

mi e-mail mechanker@hotmail.com

Saludos