Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.066 c
15-1353834526
dummy_user
2012-11-25 13:08
2013.03.22
Как сделать сопроводительную документацию?


4-1261361454
SPeller
2009-12-21 05:10
2013.03.22
Проблема с циклом выборки сообщений


15-1333312206
Юрий
2012-04-02 00:30
2013.03.22
С днем рождения ! 2 апреля 2012 понедельник


2-1340013571
IGray
2012-06-18 13:59
2013.03.22
Как правильно закрыть модальную форму из OnActivate?


2-1330375381
LDV
2012-02-28 00:43
2013.03.22
Access Violation on AssignFile(fp, file_name)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский