Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 04 Dic, 2004 1:27 am Asunto: sombra real |
|
|
Bien, revisando el foro, existe, un enlace para crear un formulario del modo trasparente, ahora bien, como puedo hacer una region del form o de cual quier parte, hacerla de manera trasparente, para realizar una sombra real
supongamos que tengo dentro del form, algo dibujado..
de la siguiente manera, por ejemplo un fondo, con una imagen bmp
| Código: | __fastcall TFGESTION::TFGESTION(TComponent* Owner)
: TForm(Owner)
{
this->Brush->Bitmap = this->Image1->Picture->Bitmap;
}
//---------------------------------------------------------------------------
|
con este codigo, se pinta, la imagen, como un mozaico, dentro del form, hasta ahi todo va muy bien, bueno pero tengo una imagen, que aparece en el form, y quiero ponerle una sombra. con el siguiente codigo, claro esta tomado de varias personas de este foro..
puedo realizar una sombra degradada
de un color espesifico.
| Código: |
//--------------------PONER LA SOBRA A LOS COMPONENTES DEL FORM
void __fastcall PonerSombra( TForm *F, TColor sColor){
//***********
for(int i=0; i < F->ComponentCount-1; i++){
if (F->Components[i]->ClassNameIs( "TDBComboBox" )||
F->Components[i]->ClassNameIs( "TDBEdit" ) ||
F->Components[i]->ClassNameIs( "TDBImage" )||
F->Components[i]->ClassNameIs( "TDBListBox" )||
F->Components[i]->ClassNameIs( "TDBLookupComboBox" )||
F->Components[i]->ClassNameIs( "TMemo" )||
F->Components[i]->ClassNameIs( "TEdit" )||
F->Components[i]->ClassNameIs( "TComboBox" )||
F->Components[i]->ClassNameIs( "TListBox" )||
F->Components[i]->ClassNameIs( "TMaskEdit" )||
F->Components[i]->ClassNameIs( "TBitBtn" )||
F->Components[i]->ClassNameIs( "TCheckListBox" )||
F->Components[i]->ClassNameIs( "TScrollBox" )||
F->Components[i]->ClassNameIs( "TStringGrid" )||
F->Components[i]->ClassNameIs( "TDrawGrid" )||
F->Components[i]->ClassNameIs( "TDBGrid" )||
F->Components[i]->ClassNameIs( "TProgressBar" )||
F->Components[i]->ClassNameIs( "TDBLookupListBox" )||
F->Components[i]->ClassNameIs( "TPanel" )||
F->Components[i]->ClassNameIs( "TScrollBox" )||
F->Components[i]->ClassNameIs( "TDBMemo" ) ||
F->Components[i]->ClassNameIs( "TButton" ) ||
F->Components[i]->ClassNameIs( "TListBox" ) ||
F->Components[i]->ClassNameIs( "TScrollBar" ) ||
F->Components[i]->ClassNameIs( "TGroupBox" ) ||
F->Components[i]->ClassNameIs( "TValueListEditor" ) ||
F->Components[i]->ClassNameIs( "TImage" )
){
TControl *obj;
obj= (TControl *)F->Components[i];
if(obj->Visible){
TRect rect,rec1,rec2;
TColor old,c1,c2;
rect = obj->BoundsRect;
// LADO DE ABAJO
rec1.left = rect.left+4;
rec1.right = rect.right;
rec1.top = rect.Bottom-1;
rec1.Bottom = rect.Bottom+5;
// LADO DERECHO
rec2.left = rect.right-1;
rec2.right = rect.right+5;
rec2.top = rect.top+4;
rec2.Bottom = rect.Bottom;
old = F->Canvas->Brush->Color;
F->Canvas->Brush->Style = bsClear;
F->Canvas->Pen->Style = bsClear;
c1 = static_cast<TColor>( ColorToRGB(sColor) );
c2 = static_cast<TColor>( ColorToRGB(old) );
int Rf = GetRValue(c1), Gf=GetGValue(c1), Bf=GetBValue(c1);
int Rd = GetRValue(c2)-Rf, Gd=GetGValue(c2)-Gf, Bd=GetBValue(c2)-Bf;
int R, G, B;
int nTonos = 75;
float incremento = (float) nTonos / rec1.Height();
for (int i=0; i<=rec1.Height(); ++i)
{
R = Rf + MulDiv(incremento*i, Rd, nTonos);
G = Gf + MulDiv(incremento*i, Gd, nTonos);
B = Bf + MulDiv(incremento*i, Bd, nTonos);
F->Canvas->Brush->Color = (TColor) RGB(R, G, B);
F->Canvas->Pen->Color = (TColor) RGB(R, G, B);
F->Canvas->MoveTo(rec1.left, rec1.top+i);
F->Canvas->LineTo(rec1.right, rec1.top+i);
rec1.right++;
rec1.left++;
}
incremento = (float) nTonos / rec2.Width();
for (int i=0; i<=rec2.Width(); ++i)
{
R = Rf + MulDiv(incremento*i, Rd, nTonos);
G = Gf + MulDiv(incremento*i, Gd, nTonos);
B = Bf + MulDiv(incremento*i, Bd, nTonos);
F->Canvas->Brush->Color = (TColor) RGB(R, G, B);
F->Canvas->Pen->Color = (TColor) RGB(R, G, B);
F->Canvas->MoveTo(rec2.left+i, rec2.top);
F->Canvas->LineTo(rec2.left+i, rec2.Bottom);
rec2.Bottom++;
rec2.top++;
}
F->Canvas->Brush->Color = old;
}
}
}
}
|
hasta ahi todo se ve muy bien, pero al cambiar el fondo, ya que la imagen original, no la encontre de nuevo y tuve que poner otra, me di cuenta, que la sombra, previa funcion.. dejaba al final, un color blanco..
la pregunta, es o mejor dicho como puedo utilizar la funcion
| Cita: | int CombineRgn(
HRGN hrgnDest, // handle to destination region
HRGN hrgnSrc1, // handle to source region
HRGN hrgnSrc2, // handle to source region
int fnCombineMode // region combining mode
); | de la ayuda de builder,
para combinar la sombra y poder dejarla correctamente, como en los dialogos de linux,
que aparecen con una sombra correctamente, en forma degradad, y respetando el fondo en que se encuentran..
anterior mente, en DOS, se le cambiaba el color del Caracter por un gris, y se tenia una sombra real, aqui como le hago para cambiar el color del pixel, que tengo de fondo. claro esta usando la funcion del a sombra, para poder, dar el efecto de sombra real..
alguien tiene ideas..
por su atencion gracias.. _________________
 |
|