![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Своя рамка в ListBox [D7, WinXP]
Leonardo © (2006-05-09 23:02:00)Так я рисую рамку в WM_NCPAINT, свойства BorderStyle = bsSingle, Ctl3D = False.
procedure TXListBox.WMNCPaint(var Message: TWMNCPAINT);
var
DC: THandle;
R: TRect;
ACanvas: TCanvas;
begin
CallWindowProc(DefWndProc, Handle, Message.Msg, TMessage(Message).WParam, TMessage(Message).LParam);
DC := GetWindowDC(Handle);
try
GetWindowRect(Handle, R);
OffsetRect(R, -R.Left, -R.Top);
ACanvas := TCanvas.Create;
try
ACanvas.Handle := DC;
ExcludeClipRect(ACanvas.Handle, 2, 2, R.Right - 2, R.Bottom - 2);
ACanvas.Brush.Style := bsClear;
ACanvas.Pen.Color := FBorderColor;
ACanvas.Rectangle(R);
finally
ACanvas.Handle := 0;
ACanvas.Free;
end;
finally
ReleaseDC(Handle, DC);
end;
end;
Но проблема вот в чем, при смене свойства BorderColor, рамка не меняет цвет:
procedure TXListBox.SetBorderColor(Value: TColor);
begin
if FBorderColor <> Value then
begin
FBorderColor := Value;
Invalidate;
end;
end;
Repaint тоже не помог вместо Invalidate, может подскажите чемнибудь?
А еще как в конструкторе сразу задать свойство Ctl3D := False? Так не работает, всеравно получается что равно True...
constructor TXListBox.Create(AOwner: TComponent);
begin
inherited;
Ctl3D := False;
end;
Это для того чтобы место для рамки было отведено в один пиксель, если свойстно равно True, то там видны небольшие прозрачные места около рамки... Или вообще надо размер бордюра подругому как-то задавать? Подскажите пожалуйста...
Leonardo (2006-05-10 03:26:00) [1]Мне интересно...
Leonardo (2006-05-10 03:25:00) [2]Подскажите мне тогда пожалуйста по моим вопросам...
Джо (2006-05-10 02:54:00) [3]> [1] Leonardo (10.05.06 00:17)
> Какая, однако, неразрешамая проблема-то оказывается....
Какая там неразрешимая? Она выдуманная, а потому неинтересная, ИМХО.
Leonardo (2006-05-10 00:17:00) [4]Какая, однако, неразрешамая проблема-то оказывается....