Главная страница
    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.06 c
8-1229748560
Лена111
2008-12-20 07:49
2013.03.22
Перерисовывать ЛистБокс до не узнаваимости


15-1347627388
Roman_man
2012-09-14 16:56
2013.03.22
Could not create output file


2-1330523358
Alex_C
2012-02-29 17:49
2013.03.22
Resize bitmap


2-1330463360
Михалыч
2012-02-29 01:09
2013.03.22
Сетевая Бд на MySql


2-1338195526
Вовка
2012-05-28 12:58
2013.03.22
Сохранение файла gif





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