Форум: "Компоненты";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизEdit Найти похожие ветки
← →
Alex01 (2005-02-04 15:46) [0]Как в Edit"е сделать алигмент текста по правой стороне?
Все свойства проверил, в справке тоже ничего не нашел
← →
Marser © (2005-02-04 17:26) [1]Ручками
← →
MBo © (2005-02-04 17:41) [2]стиль ES_RIGHT нужно включить при создании.
и ES_MULTILINE при необходимости учесть следующее:
ES_RIGHT
Windows 98/Me, Windows 2000/XP: Right aligns text in a single-line or multiline edit control. Windows 95, Windows NT 4.0 and earlier: Right aligns text in a multiline edit control.
← →
Alex01 (2005-02-04 20:58) [3]Нет, мне не на API надо, а у стандартного TEdit"a Ура! Я нашел в справке свойство Aligment
Use Alignment to indicate text alignment in the edit box
taLeftJustify:Align text on the left side in the edit control.
taCenter:Center the text in the edit control.
taRightJustify:Align text on the right side in the edit control.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Все это здорово, но в реальности у ЕДИТА нет такого свойства!!!!
Бред какой-то.
Я знаю, щас вы будете поливать меня грязью, но я просто в отчаянии...
← →
Юрий Зотов © (2005-02-04 23:46) [4]> Alex01 (04.02.05 20:58) [3]
> Нет, мне не на API надо, а у стандартного TEdit"a
Только что Вы сказали, что хотите иметь стандартный велосипед, но с десятью колесами.
А так не бывает. Либо стандартный, либо с десятью колесами. Одно из двух.
По сабжу - пишете наследника, замещаете CreateParams и ставите ES_RIGHT. Примеров полно в VCL, работы - на 10 минут.
Или используете Get/SetClassLong и все равно ставите ES_RIGHT. Тоже на 10 минут.
← →
Cobalt © (2005-02-07 23:55) [5]Alex01 (04.02.05 20:58) [3]
В новой Дельфе (если не ошибаюсь, начиная с 6-ой) надо внимательнее читать справку.
Это свойство только у CLX-ного контрола.
← →
Petr V. Abramov © (2005-02-08 01:58) [6]> замещаете CreateParams и ставите ES_RIGHT.
or ES_MULTILINE
"эту хохмочку я уже знаю" :))) От Вас :)))
> Тоже на 10 минут.
Это Игорю Шевченко на 10 мин. :)))
← →
Юрий Зотов © (2005-02-08 06:16) [7]> Petr V. Abramov © (08.02.05 01:58) [6]
См. [2]. Для современныз систем ES_MULTILINE уже не требуется.
← →
ККВ (2005-02-08 07:26) [8]procedure TMainFrm.RJustifyEdit(var ThisEdit:TEdit);
var
Left, Width: Integer;
GString: string;
Rgn: TRect;
TheCanvas: TControlCanvas;
begin
TheCanvas := TControlCanvas.Create;
try
TheCanvas.Control := ThisEdit;
GString := ThisEdit.Text;
Rgn := ThisEdit.ClientRect;
TheCanvas.FillRect(Rgn);
Width := TheCanvas.TextWidth(GString);
Left := Rgn.Right - Width - 1;
TheCanvas.TextRect(Rgn, Left, 0, GString);
finally
TheCanvas.Free;
end;
end;
← →
Goorus © (2005-02-21 17:17) [9]Тоже недавно понадобилось, вот компонент:
type
TTransparentEdit = class(TEdit)
private
procedure SetTransparent(const Value: Boolean);
function GetTransparent: Boolean;
procedure SetAlignment(const Value: TAlignment);
protected
FAlignment: TAlignment;
procedure CreateParams(var Params: TCreateParams); override;
procedure WndProc(var Message: TMessage); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Alignment: TAlignment read FAlignment write SetAlignment;
property Transparent: Boolean read GetTransparent write SetTransparent;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Goorus", [TTransparentEdit]);
end;
{ TTransparentEdit }
constructor TTransparentEdit.Create(AOwner: TComponent);
begin
inherited;
ControlStyle := ControlStyle + [csOpaque];
end;
procedure TTransparentEdit.CreateParams(var Params: TCreateParams);
const
Alignments: array[TAlignment] of DWORD = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
inherited CreateParams(Params);
with Params do
begin
Style := Style or Alignments[FAlignment];
// ExStyle := ExStyle or WS_EX_TRANSPARENT;
end;
end;
destructor TTransparentEdit.Destroy;
begin
inherited;
end;
function TTransparentEdit.GetTransparent: Boolean;
begin
Result := not (csOpaque in ControlStyle);
end;
procedure TTransparentEdit.SetAlignment(const Value: TAlignment);
begin
if FAlignment <> Value then
begin
FAlignment := Value;
RecreateWnd;
end;
end;
procedure TTransparentEdit.SetTransparent(const Value: Boolean);
begin
if Transparent <> Value then
begin
if Value then
ControlStyle := ControlStyle - [csOpaque]
else
ControlStyle := ControlStyle + [csOpaque];
Invalidate;
end;
end;
procedure TTransparentEdit.WndProc(var Message: TMessage);
begin
with Message do
if Msg = WM_ERASEBKGND then
begin
if Transparent then
begin
Brush.Style := bsSolid;
SetBkColor(TWMEraseBkGnd(Message).DC, Color);
SetBkMode(TWMEraseBkGnd(Message).DC, Windows.OPAQUE);
FillRect(TWMEraseBkGnd(Message).DC, ClientRect, Brush.Handle);
end
else
begin
// SetBkMode(TWMEraseBkGnd(Message).DC, Windows.OPAQUE);
Brush.Style := bsSolid;
// FillRect(TWMEraseBkGnd(Message).DC, ClientRect, Brush.Handle);
end;
Result := 0;
inherited;
end
else
if Msg = WM_PAINT then
begin
Brush.Style := bsSolid;
SetBkColor(TWMEraseBkGnd(Message).DC, Color);
SetBkMode(TWMEraseBkGnd(Message).DC, Windows.OPAQUE);
Result := 0;
inherited;
end
else
inherited;
end;
Просто поудаляй всё, что связано с Transparent, прозрачность у меня так и не получилась :(
Может кто поможет? Дело в том, что елси на WM_ERASEBKGND ставить Brush.Style := bsClear, то форма за эдитом не перерисовывается, а фон текста всё-равно белый.
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c