-
День добрый! Может, кто уже погружался в недра VCL и API, и знает, как функционирует BevelKind у TWinControl. По умолчанию он далее у наследников не используется. Попытавшись его использовать в наследнике, я получил ряд интересных глюков, которые хотелось бы прояснить (например, отсутствие перерисовки скроллбаров в DBGrid'е, или несмещение области вывода курсора при установленной рамке, т.е. текст выводится практически по рамке). Кто-то пытался с этим бороться? С чем это связано?
-
Вин-контролы могут иметь бордюры (к примеру у TEdit - впуклая рамка, у формы - стандартный бордюр, делающий окно рельефным), причем бордюрная область не входит в клиентскую часть. Отрисовывается эта область отдельно по событию WM_NCPAINT, где BevelKind и анализируется. Дальше - см. TWinControl.WMNCPaint.
-
Кроме того, вин-контролы могут иметь стили. WS_EX_CLIENTEDGE или WS_THICKFRAME. Это уже обрабатывает оконная процедура данного окна, в недрах WinAPI
-
Спасибо за ответы! Но... я в них так и не нашел того, что меня интересовало, видимо, плохо спросил :)) Вот пример кода, в котором я хочу, чтобы у TEdit'а отрисовывалась не стандартная грубая рамка (стиль WS_EX_CLIENTEDGE по умолчанию), а моя, с моими цветами отрисовки рамки. Ну для простоты примера - хотя бы стандартная WinControl-овская. Вот немножко кода:
type
TMyEdit = class(TCustomEdit);
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
published
property BevelKind;
property BevelInner;
property BevelOuter;
end;
...
constructor Create(AOwner: TComponent);
begin
inherited Create(AOwner);
inherited BevelKind := bkFlat;
end;
procedure CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle and not WS_EX_CLIENTEDGE;
end;
Вроде бы ничего особенного, должна бы вывестись стандартная плоская рамка, и она выводится, но позиция курсора не пересчитывается, т.е. курсор мигает практически на рамке. Что сделать, чтобы его положение рассчитывалось в зависимости от толщины и типа рамки?
-
Я это вовсю использую, проблему не наблюдал. D7.
-
косяк в темах XP при wm_ncpaint глючит однозначно, без их использования всё норм.
|