Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизКоряво работает свой компоннет на основе TEdit Найти похожие ветки
← →
Gedimen © (2012-04-22 18:05) [0]Доброго времени суток, господа форумчане.
Использую Delphi XE2.
Нужна Ваша помощь. Пишу свой компонент на основе TEdit - поле с кнопкой. Кнопка находится справа, поэтому чтобы текст при вводе не лез поверх кнопки сделал отступ:
self.Perform(EM_SETMARGINS, EC_RightMargin, MakeLong(0,20));
Все вроде нормально, только в рунтайме если кликнуть мышью в это поле, то фон текста закрывает кнопку, отпускаем и отводим курсор - опять нормально. Как побороть не знаю.
Исходник:
unit GpButtonEdit;
interface
uses
Winapi.Windows,System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Vcl.Buttons,
Vcl.ExtCtrls, Messages;
type
TGpButtonEdit = class(TEdit)
private
{ Private declarations }
FEdit : TEdit;
FSelButton : TBitBtn;
procedure WMSize(var Message: TMessage); message WM_SIZE;
function GetSelBtnCheck: boolean;
procedure SetSelBtnCheck(const Value: boolean);
procedure EditWndProc(Sender: TObject);
//procedure ButtonPosition;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
property SelButton: boolean read GetSelBtnCheck write SetSelBtnCheck;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("MyComponents", [TGpButtonEdit]);
end;
constructor TGpButtonEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
width := 121;
height := 21;
FSelButton := TBitBtn.Create(self);
FSelButton.Parent := self;
FSelButton.Top := -1;
FSelButton.Width:=21;
FSelButton.Caption := "...";
self.OnChange:=EditWndProc;
end;
procedure TGpButtonEdit.EditWndProc(Sender: TObject);
begin
// делаю отступ справа при вводе текста, чтобы не лез на кнопку
self.Perform(EM_SETMARGINS, EC_RightMargin, MakeLong(0,20));
end;
function TGpButtonEdit.GetSelBtnCheck: boolean;
begin
Result := FSelButton.Visible;
end;
procedure TGpButtonEdit.SetSelBtnCheck(const Value: boolean);
begin
FSelButton.Visible := Value;
end;
procedure TGpButtonEdit.WMSize(var Message: TMessage);
begin
inherited;
FSelButton.height := height-2;
FSelButton.Left := width - FSelButton.width-3;
end;
end.
← →
sniknik © (2012-04-22 19:33) [1]EM_SETRECTNP
вместо
EM_SETMARGINS
+ нужно добавить ES_MULTILINE
← →
Омлет © (2012-04-22 19:43) [2]
> + нужно добавить ES_MULTILINE
?? Чтобы при нажатии Enter вставлялся перевод строки?
← →
sniknik © (2012-04-22 20:09) [3]> ?? Чтобы при нажатии Enter вставлялся перевод строки?
нет, чтобы заработал EM_SETRECTNP, без него бессмысленно. а чтобы не вставлялся перевод(не работал ентер), его можно отключить.
← →
MBo © (2012-04-23 05:36) [4]На всякий случай - в XE/XE2 есть TButtonedEdit
← →
Gedimen © (2012-04-23 10:26) [5]
> На всякий случай - в XE/XE2 есть TButtonedEdit
Есть. Но у меня будет свой функционал у компонента.
И, почему-то, у стандартного TButtonedEdit у меня кнопки не отображаются, ставлю visible (что у левой, что у правой), а они не отображаются.
← →
MBo © (2012-04-23 13:45) [6]>а они не отображаются
рисунки надо назначить
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.097 c