Herkese İyi AKşamlar.
CheckBox üzerine tıklandığı zaman x işaretinin çıkmasını istiyorum. Delphi üzerinde component resminde x işareti gözükmesine rağmen Form üzerinde checkbox tıklandığında check / işareti çıkıyor.
Chekcboxta tıklandığında x sembolünü nasıl gösterebilirim.
Incal99
CheckBox üzerinde X işareti yerine check işareti
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Merhaba..
- Bu işlemi TCheckBox nesnesini manipüle etmeden yapma olanağımız yok malesef.
- Arşivimden bir TCheckBox'u Transparan yapan kodu buldum ve üzerinde küçük bir ekleme ile onay check markını x işaretine dönüştürdüm. Böylece lazım olabilecek başka bir özelliği de kazandırmış olalım. Transparan özelliği...
- Uygulanmış hali de en sondaki FormCreate olayında örnekledim. Mevcut bir CheckBox yok edilmeden önce ölçüleri, konumu ve içeriği alınarak ikizi bu yeni MyCheckBox ile bizim tarzımızda üretiliyor.
- Tavsiye etmem ama sana zor geliyorsa üzerinde oynama yapmak yerine üçüncü parti hazırlanmış bileşenler de kullanabilirsin.
- Diğer yandan daha etkileyici sonuç verecek çözümler önerebilirim. Mesela checkbox yerine basit bir TLabel veya daha güzeli TImage nesnesi kullanmak gibi. Ben sıkça bu şekilde kullanıyorum.
- Çok sayıda farklı işaret resmi ImageList içine depo ediyorum.
- Bir Image nesnesinin TAG değeri 1 ise checked, 0 ise checked değil kabul ediyor ve işlemlerimde kullanıyorum.
- Image nesnesine OnClick yapıldığında Tag değerini değiştiriyorum, 0 ise 1 veya tersi yapıyorum. Resimler de buna göre güncellenince kullanıcı bir checkbox basmış gibi hissediyor.
- Hatta biraz daha ileri gidip, mouse image üzerin gelince check kutusu zoom yapıyor, basınca işaret biniyor vb. güzellikler de yapabilirsin.
- Cevap uzadı da uzadı seçim senin. Çalışmalarında başarılar...
- Bu işlemi TCheckBox nesnesini manipüle etmeden yapma olanağımız yok malesef.
- Arşivimden bir TCheckBox'u Transparan yapan kodu buldum ve üzerinde küçük bir ekleme ile onay check markını x işaretine dönüştürdüm. Böylece lazım olabilecek başka bir özelliği de kazandırmış olalım. Transparan özelliği...
- Uygulanmış hali de en sondaki FormCreate olayında örnekledim. Mevcut bir CheckBox yok edilmeden önce ölçüleri, konumu ve içeriği alınarak ikizi bu yeni MyCheckBox ile bizim tarzımızda üretiliyor.
Kod: Tümünü seç
// Başlangıç xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
type
TMyCheckBox = class(TCheckBox)
protected
procedure CNDrawItem(var Message: TWMDrawItem);
message CN_DRAWITEM;
procedure CMEnabledchanged(var Message: TMessage);
message CM_ENABLEDCHANGED;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure SetChecked(Value: Boolean); override;
procedure SetButtonStyle;
public
constructor Create(AOwner: TComponent); override;
end;
{..}
constructor TMyCheckBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle:=ControlStyle - [csDoubleClicks];
end;
procedure TMyCheckBox.CNDrawItem(var Message: TWMDrawItem);
var
XCanvas: TCanvas;
XCaptionRect, XGlyphRect: TRect;
procedure xxDrawBitMap(ACanvas: TCanvas);
const
xx_h =13; xx_w = 13;
var
xxGlyph: TBitmap;
xxX, xxY, xxStepY, xxStepX: integer;
begin
xxGlyph:=TBitmap.Create;
try
//xxGlyph.Handle:=LoadBitmap(0, PChar(OBM_CHECKBOXES));
If State = cbChecked then begin
xxGlyph.Width := 10;
xxGlyph.Height := 10;
xxGlyph.Canvas.Brush.Color := clYellow;
xxGlyph.PixelFormat := pf24Bit;
xxGlyph.Canvas.FillRect( xxGlyph.Canvas.ClipRect );
xxGlyph.Canvas.Pen.Style := psSolid;
xxGlyph.Canvas.Pen.Color := clBlack;
xxGlyph.Canvas.Pen.Width := 2;
With xxGlyph.Canvas.ClipRect do
xxGlyph.Canvas.Rectangle( xxGlyph.Canvas.ClipRect );
xxGlyph.Canvas.Font.Size := 7;
xxGlyph.Canvas.Font.Style := [fsBold];
xxGlyph.Canvas.Brush.Style := bsClear;
xxGlyph.Canvas.TextOut(2,-2, 'x');
end else begin
xxGlyph.Width := 10;
xxGlyph.Height := 10;
xxGlyph.Canvas.Brush.Color := clWhite;
xxGlyph.PixelFormat := pf24Bit;
xxGlyph.Canvas.FillRect( xxGlyph.Canvas.ClipRect );
xxGlyph.Canvas.Pen.Style := psSolid;
xxGlyph.Canvas.Pen.Color := clBlack;
xxGlyph.Canvas.Pen.Width := 2;
xxGlyph.Canvas.Rectangle( xxGlyph.Canvas.ClipRect );
end;
xxY:=XGlyphRect.Top + (XGlyphRect.Bottom - XGlyphRect.Top - xx_h) div 2;
xxX:=2;
xxStepX:=0; xxStepY:=0;
{ // ben kaldırdım.. Manipüle etmek için...
if Enabled then begin
case State of
cbChecked: xxStepX:=xxStepX + xx_w;
cbGrayed: xxStepX:=xxStepX + xx_w*3;
end;
end
else
if State=cbChecked
then begin
xxStepX:=xxStepX + xx_w*3;
end
else xxStepX:=xxStepX + xx_w*2;
//}
ACanvas.CopyRect(Rect(xxX, xxY, xxX+xx_w, xxY+xx_h),
xxGlyph.Canvas,
Rect(xxStepX, xxStepY, xx_w+xxStepX, xx_h+xxStepY));
finally
xxGlyph.Free;
end;
end;
procedure xxDrawCaption;
var
xXFormat: longint;
begin
xXFormat:=DT_VCENTER + DT_SINGLELINE + DT_LEFT;
xXFormat:=DrawTextBiDiModeFlags(xXFormat);
DrawText(Message.DrawItemStruct.hDC, PChar(Caption),
length(Caption), XCaptionRect, xXFormat);
end;
begin
XGlyphRect := Message.DrawItemStruct.rcItem;
XGlyphRect.Right := 20;
XCaptionRect := Message.DrawItemStruct.rcItem;
XCaptionRect.Left:= XGlyphRect.Right;
XCanvas := TCanvas.Create;
try
XCanvas.Handle:=Message.DrawItemStruct.hDC;
XCanvas.Brush.Style:=bsClear;
xxDrawBitMap(XCanvas);
xxDrawCaption;
finally
XCanvas.Free;
end;
end;
procedure TMyCheckBox.CMEnabledchanged(var Message: TMessage);
begin
inherited ;
Invalidate;
end;
procedure TMyCheckBox.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle:=Params.ExStyle or WS_EX_Transparent;
end;
procedure TMyCheckBox.CreateWnd;
begin
inherited CreateWnd;
SetButtonStyle;
end;
procedure TMyCheckBox.SetChecked(Value: Boolean);
begin
inherited SetChecked(Value);
Invalidate;
end;
procedure TMyCheckBox.SetButtonStyle;
const
BS_MASK = $000F;
var
Style: Word;
begin
if HandleAllocated then begin
Style:=BS_CHECKBOX or BS_OWNERDRAW;
if GetWindowLong(Handle, GWL_STYLE) and BS_MASK <> Style
then SendMessage(Handle, BM_SETSTYLE, Style, 1);
end;
end;
// Bitiş xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
procedure TForm1.FormCreate(Sender: TObject);
Var
x, y, w, h : Integer;
t : String;
begin
x := CheckBox1.Left;
y := CheckBox1.Top;
w := CheckBox1.Width;
h := CheckBox1.Height;
t := CheckBox1.Caption;
CheckBox1.Free;
CheckBox1 := TMyCheckBox.Create(Self);
CheckBox1.Parent := Self;
CheckBox1.Left :=x;
CheckBox1.Top :=y;
CheckBox1.Width :=w;
CheckBox1.Height :=h;
CheckBox1.Caption :=t;
end;
- Diğer yandan daha etkileyici sonuç verecek çözümler önerebilirim. Mesela checkbox yerine basit bir TLabel veya daha güzeli TImage nesnesi kullanmak gibi. Ben sıkça bu şekilde kullanıyorum.
- Çok sayıda farklı işaret resmi ImageList içine depo ediyorum.
- Bir Image nesnesinin TAG değeri 1 ise checked, 0 ise checked değil kabul ediyor ve işlemlerimde kullanıyorum.
- Image nesnesine OnClick yapıldığında Tag değerini değiştiriyorum, 0 ise 1 veya tersi yapıyorum. Resimler de buna göre güncellenince kullanıcı bir checkbox basmış gibi hissediyor.
- Hatta biraz daha ileri gidip, mouse image üzerin gelince check kutusu zoom yapıyor, basınca işaret biniyor vb. güzellikler de yapabilirsin.
- Cevap uzadı da uzadı seçim senin. Çalışmalarında başarılar...