Ir al contenido


Foto

Checkbox Transparente?


  • Por favor identifícate para responder
5 respuestas en este tema

#1 BrainDeath

BrainDeath

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 22 octubre 2009 - 03:03

Hola, Como veran soy nuevo en el foro espero aprender mucho de ustedes ^^

Nose si es malo que pida,pero intentare ayudar en lo que sepa

Mmmm..Ultimamente me quede con la duda de alguna forma de quitarle al checkbox el color de fondo,osea que quede transparente encima de un Image y solo quede la cajita de marcado y el texto.

He estado buscando como loco y no he encontrado ninguna solucion,Habra algun componente o codigo que haga lo que quiero?

Espero su ayuda Saludos..
  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 22 octubre 2009 - 03:20

Primero que todo bienvenido al foro, acabo de ensayar en D2010 con un checkbox y un Timage y con solo poner True a la propiedad parentColor del checkBox este se torna transparente.

saludos
  • 0

#3 BrainDeath

BrainDeath

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 22 octubre 2009 - 03:29

Primero que todo bienvenido al foro, acabo de ensayar en D2010 con un checkbox y un Timage y con solo poner True a la propiedad parentColor del checkBox este se torna transparente.

saludos


Mmmmm.. por cierto estoy usando delphi 7 jeje de todas formas gracias
  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 22 octubre 2009 - 03:39

Crea un nuevo proyecto con  un form llamado form1 y intercepta los evento Onpaint y OnCreate , coloca el siguiente codigo y ensaya;



delphi
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Forms, StdCtrls, Messages, Controls;
  7.  
  8. type
  9.  
  10.   // Example of a check box with tranparent caption
  11.   TMyCheckBox = class(TCheckBox)
  12.   protected
  13.     procedure CNDrawItem(var Msg: TWMDrawItem); message CN_DRAWITEM;
  14.     procedure CreateParams(var Params: TCreateParams); override;
  15.     procedure CreateWnd; override;
  16.     procedure SetButtonStyle;
  17.   end;
  18.  
  19.   TForm1 = class(TForm)
  20.     procedure FormCreate(Sender: TObject);
  21.     procedure FormPaint(Sender: TObject);
  22.   public
  23.     fCB: TCheckBox;
  24.     fMyCB: TMyCheckBox;
  25.   end;
  26.  
  27. var
  28.   Form1: TForm1;
  29.  
  30. implementation
  31.  
  32. uses
  33.   Classes, Windows, Graphics;
  34.  
  35. {$R *.dfm}
  36.  
  37. { TMyCheckBox:  }
  38.  
  39. procedure TMyCheckBox.CNDrawItem(var Msg: TWMDrawItem);
  40. var
  41.   XCanvas: TCanvas;
  42.   XCaptionRect, XGlyphRect: TRect;
  43.  
  44.   procedure xxDrawBitMap(ACanvas: TCanvas);
  45.   const
  46.     xx_h = 13;
  47.     xx_w = 13;
  48.   var
  49.     xxGlyph: TBitmap;
  50.     xxX, xxY, xxStepY, xxStepX: integer;
  51.   begin
  52.     xxGlyph := TBitmap.Create;
  53.     try
  54.       xxGlyph.Handle := LoadBitmap(0, PChar(OBM_CHECKBOXES));
  55.       xxY := XGlyphRect.Top +
  56.         (XGlyphRect.Bottom - XGlyphRect.Top - xx_h) div 2;
  57.       xxX := 2;
  58.       xxStepX := 0;
  59.       xxStepY := 0;
  60.       case State of
  61.         cbChecked: xxStepX := xxStepX + xx_w;
  62.         cbGrayed:  xxStepX := xxStepX + xx_w * 3;
  63.         end;
  64.       ACanvas.CopyRect(
  65.         Rect(xxX, xxY, xxX + xx_w,  xxY + xx_h),
  66.         xxGlyph.Canvas,
  67.         Rect(xxStepX, xxStepY, xx_w + xxStepX, xx_h + xxStepY)
  68.       );
  69.     finally
  70.       xxGlyph.Free;
  71.     end;
  72.   end;
  73.  
  74.   procedure xxDrawCaption;
  75.   var
  76.     xXFormat: longint;
  77.   begin
  78.     xXFormat := DT_VCENTER + DT_SINGLELINE + DT_LEFT;
  79.     xXFormat := DrawTextBiDiModeFlags(xXFormat);
  80.     DrawText(
  81.       Msg.DrawItemStruct.hDC,
  82.       PChar(Caption),
  83.       Length(Caption),
  84.       XCaptionRect,
  85.       xXFormat
  86.     );
  87.   end;
  88.  
  89. begin
  90.   XGlyphRect := Msg.DrawItemStruct.rcItem;
  91.   XGlyphRect.Right := 20;
  92.   XCaptionRect := Msg.DrawItemStruct.rcItem;
  93.   XCaptionRect.Left := XGlyphRect.Right;
  94.   XCanvas := TCanvas.Create;
  95.   try
  96.     XCanvas.Handle := Msg.DrawItemStruct.hDC;
  97.     XCanvas.Brush.Style := bsClear;
  98.     xxDrawBitMap(XCanvas);
  99.     xxDrawCaption;
  100.   finally
  101.     XCanvas.Free;
  102.   end;
  103. end;
  104.  
  105. procedure TMyCheckBox.CreateParams(var Params: TCreateParams);
  106. begin
  107.   inherited CreateParams(Params);
  108.   Params.ExStyle := Params.ExStyle or WS_EX_Transparent;
  109. end;
  110.  
  111. procedure TMyCheckBox.CreateWnd;
  112. begin
  113.   inherited CreateWnd;
  114.   SetButtonStyle;
  115. end;
  116.  
  117. procedure TMyCheckBox.SetButtonStyle;
  118. const
  119.   BS_MASK = $000F;
  120. var
  121.   Style: Word;
  122. begin
  123.   if HandleAllocated then
  124.   begin
  125.     Style := BS_CHECKBOX or BS_OWNERDRAW;
  126.     if GetWindowLong(Handle, GWL_STYLE) and BS_MASK <> Style then
  127.       SendMessage(Handle, BM_SETSTYLE, Style, 1);
  128.   end;
  129. end;
  130.  
  131. { TForm1 }
  132.  
  133. procedure TForm1.FormCreate(Sender: TObject);
  134. begin
  135.   // Normal check box
  136.   fCB := TCheckBox.Create(Self);
  137.   fCB.Parent := Self;
  138.   fCB.Left := 20;
  139.   fCB.Top := 20;
  140.   fCB.Caption := fCB.ClassName;
  141.   // Subclasses check box
  142.   fMyCB := TMyCheckBox.Create(Self);
  143.   fMyCB.Parent := Self;
  144.   fMyCB.Left := 20;
  145.   fMyCB.Top := fCB.Top + fCB.Height + 40;
  146.   fMyCB.Caption := fMyCB.ClassName;
  147. end;
  148.  
  149. // Paints a yellow / white candy stripe on the form
  150. procedure TForm1.FormPaint(Sender: TObject);
  151. var
  152.   Idx: Integer;
  153. begin
  154.   for Idx := 0 to ClientHeight div 8 do
  155.   begin
  156.     if Odd(Idx) then
  157.       Canvas.Brush.Color := clWhite
  158.     else
  159.       Canvas.Brush.Color := $aaffff;  // pale yellow
  160.     Canvas.FillRect(Rect(0, Idx * 8, ClientWidth, Idx * 8 + 8));
  161.   end;
  162. end;
  163.  
  164. end.


  • 0

#5 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 22 octubre 2009 - 04:37

Crea un nuevo proyecto con  un form llamado form1 y intercepta los evento Onpaint y OnCreate , coloca el siguiente codigo y ensaya;


Probé el código en D7 y trabaja perfectamente, el evento OnPaint lo puedes quitar que solo es para pintar el form de colores.

Saludos
  • 0

#6 BrainDeath

BrainDeath

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 22 octubre 2009 - 05:41


Crea un nuevo proyecto con  un form llamado form1 y intercepta los evento Onpaint y OnCreate , coloca el siguiente codigo y ensaya;


Probé el código en D7 y trabaja perfectamente, el evento OnPaint lo puedes quitar que solo es para pintar el form de colores.

Saludos


:shocked: Gracias... Funciona perfectamente parece que dibuja el checkbox o le edita sus valores? pero esto lo quiero usar en mi aplicacion cuyo usa como 30 checkbox,habra alguna manera de ponerselos directamente? sin tanto codigo..  :cheesy: disculpa por ser pregunton jeje
  • 0




IP.Board spam blocked by CleanTalk.