Club Delphi  
    Paypal   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

 
 
Herramientas Buscar en Tema Desplegado
  #7  
Antiguo 06-06-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Originalmente lo publiqué en delphi pero puede traducirse a C++, esta es la versión:


Crear la región para el Skin:
Código PHP:
void __fastcall SkinControl(TWinControlControlGraphics::TBitmap *bmp)
{
   
bmp->HandleType bmDIB;
   
bmp->PixelFormat pf32bit;
   
Control->SetBounds(Control->LeftControl->Topbmp->Widthbmp->Height);

   
DWORD TransparentColor static_cast<DWORD*>(bmp->ScanLine[bmp->Height-1])[0];
   
HRGN rgnrgnTemp;

   
rgn CreateRectRgn(0000);

   for(
int y=0y<bmp->Height; ++y){
      
DWORD *pixel static_cast<DWORD*>(bmp->ScanLine[y]);
      for(
int x=0ini 0x<bmp->Width; ++x){
         if(
pixel[x] != TransparentColor){
            
rgnTemp CreateRectRgn(iniyxy+1);
            
CombineRgn(rgnrgnrgnTempRGN_OR);
            
DeleteObject(rgnTemp);
            
ini x;
         } else 
ini++;
      }
   }
   
SetWindowRgn(Control->Handlergntrue);
   
DeleteObject(rgn);


El cambio gráfico entre los estados:
Código PHP:
void __fastcall TSkinButton::CNDrawItem(TWMDrawItemMessage)
{
  
FCanvas->Handle Message.DrawItemStruct->hDC;
  
FCanvas->Refresh();
 
  if(
ComponentState.Contains(csDesigning)){
    if(
fBmpUp->Empty)
      
fBmpUp->LoadFromResourceName((int)HInstance"SKINBUTTON");
    
ActivateSkin();
    
FCanvas->Draw(ClientRect.leftClientRect.topfBmpUp);
    return;
  }
 
  
ActivateSkin();
 
  
bool Push Message.DrawItemStruct->itemState ODS_SELECTED;
 
  if(
Enabled){
    if(
Push && !fAllowUp){
      
fDown ^= true;
    }
    else if(
fAllowUp){
      
fDown Push;
    }
  }
  
FBitmap fBmpUp;
  if(
fDown){    // El botón está pulsado
    
if(!fBmpDown->EmptyFBitmap fBmpDown;
    if(
Enabled && fHiLight && !fBmpDownHiLight->EmptyFBitmap fBmpDownHiLight;
  }else{
    
FBitmap fBmpUp;
    if(
Enabled && fHiLight && !fBmpUpHiLight->EmptyFBitmap fBmpUpHiLight;
  }
 
  
FCanvas->StretchDraw(ClientRectFBitmap);

El código en C++ está aquí.


Saludos.
Responder Con Cita
 



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
Forms con las esquinas redondeadas CORBATIN Varios 14 04-07-2013 20:15:37
Hacer Edit esquinas redondeadas, se puede ? Rofocale Varios 8 26-10-2010 17:21:19
Redondear esquinas de cualquier control AzidRain Trucos 5 15-03-2008 19:07:04
Panel transparente o bevel con esquinas redondeadas edelphi Varios 0 30-01-2007 04:39:43
como hacer un panel o botones con las esquinas ovaladas viajero2015 Gráficos 2 14-02-2004 03:50:02


La franja horaria es GMT +2. Ahora son las 21:29:13.


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