Главная страница
    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.095 c
15-1353946630
Разведка
2012-11-26 20:17
2013.03.22
Кто знает как использовать DCPCrypt библиотеку?


15-1351367113
заводчанин
2012-10-27 23:45
2013.03.22
CNC Mazatrol


15-1329769805
Юрий
2012-02-21 00:30
2013.03.22
С днем рождения ! 21 февраля 2012 вторник


2-1345377153
Gedimen
2012-08-19 15:52
2013.03.22
FastReport Помогите. Выделение строк по условию


15-1344803402
Юрий
2012-08-13 00:30
2013.03.22
С днем рождения ! 13 августа 2012 понедельник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский