Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.045 c
11-1110634509
Watcher
2005-03-12 16:35
2005.11.06
Transparent


14-1129545313
Opilki_Inside
2005-10-17 14:35
2005.11.06
Защита БД


3-1127308032
Juice
2005-09-21 17:07
2005.11.06
Модификация через сетку табл. без ключей


14-1129545597
sergg
2005-10-17 14:39
2005.11.06
Такой же по качеству ресурс о Buildere?


1-1129192849
markers
2005-10-13 12:40
2005.11.06
Манифест vs ListView