Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Компонент. [D5, Win2k]


Demon[DZ] ©   (2002-11-11 16:02:00) 

Привет всем!
Я пишу свой компонент в стиле ХР, и вот ночю такую фитчу.
Когда фокус находится на моёи компоненте, чтоб в самом правой стороне появлялась кнопка тоже в стиле ХР.
А проблема вот в чем: если изменяется текст, то стирается область и для кнопки. А если мышку навести на кнопку, то кнопка заново прорисовывается. Как сделать так, чтоб при изминении текста область для кнопки нетрогалась?
Заранее благодарен.


Demon[DZ]   (2002-11-13 16:48:00) [1]

>Набережных С.
Спасибо вам!!!!!!!, я вам обязан по гроб:))


Набережных С.   (2002-11-13 15:36:00) [2]

Смотри почту. Немного подправил в части вывода текста, дальше сам. Не понял только, почему ты наследуешь от TWinControl, а не от TCustomEdit, там же большая часть этого уже сделана. Подумай об этом. И зачем вообще нужен FEditBtnContro тоже не понятно.


Набережных С.   (2002-11-12 18:52:00) [3]

Кидай sergeynbr@beep.ru. Но посмотрю завтра, потому как сегодня мы довольно неплохо отметили один небольшой праздник:) Да, и отправляй только PAS и, если нужно, RES fails.


Demon[DZ]   (2002-11-12 18:10:00) [4]

>Набережных С.
Если вас незатруднит, могли бы посматрерь исходники моего компонента, а то я уже запарился:(((


Набережных С.   (2002-11-12 17:53:00) [5]

>Demon[DZ] (12.11.02 12:13)

Этот код нужно оформить в виде процедуры и вызывать в CreateWnd и при изменении размеров компонента, после коррекции положения кнопки(например, в обработчике WM_SIZE, может и еще где, сейчас уже точно не помню). И он основан на предположении, что у твоего компонента окно класса EDIT


Игорь Шевченко   (2002-11-12 13:09:00) [6]

Demon[DZ] (11.11.02 16:02)

RTFS: RxLib ToolEdit.pas


Demon[DZ]   (2002-11-12 12:13:00) [7]

To Набережных С., что-то неполучается. Я ваш код вставлял и в procedure TSLXPEdit.CMEnter(var Message: TCMGotFocus) и procedure TSLXPEdit.CMExit(var Message: TCMLostFocus)
Мой компонент наследник от TWinControl.
Вот отрывки кода:

constructor TSLXPEdit.Create(AOwner: TComponent);
const EditStyle = [csClickEvents, csSetCaption, csDoubleClicks, csFixedHeight];
var Bt, Bh, Bw, Bl : integer;
begin
inherited Create(AOwner);

if NewStyleControls then ControlStyle := EditStyle
else ControlStyle := EditStyle + [csFramed];
Color := clWhite;
Width := 121;
Height := 25;
FAutoSize := True;
AdjustHeight;
TabStop := True;
FNumberFormat := None;
FAlignment := taLeftJustify;
FEnabledBorderColor := BORDER_ENABLED;
FDisabledBorderColor := BORDER_DISABLED;
FEnabledBorderWidth := ENABLED_WIDTH;
FDisabledBorderWidth := DISABLED_WIDTH;
MouseIn := False;

Bt := Top;
Bh := Height-4;
Bw := 20;
Bl := Left+Width-Bw-4;

FEditBtn := TSLXPButton.Create(nil);
with (FEditBtn) do
begin
Top := Bt;
Left := Bl;
Height := Bh;
Width := Bw;
Parent := Self;
Caption := "...";
Visible := False;
end;
end;
{##############################################################################}
procedure TSLXPEdit.CMEnter(var Message: TCMGotFocus);
var R: TRect;
begin
MouseIn := True;
if not (csLButtonDown in ControlState) and
(GetWindowLong(Handle, GWL_STYLE) and ES_MULTILINE = 0) then SelectAll;
inherited;
FEditBtn.Visible := True;
Invalidate;
end;
{##############################################################################}
procedure TSLXPEdit.CMExit(var Message: TCMLostFocus);
var R: TRect;
begin
MouseIn := False;
if not (csLButtonDown in ControlState) and
(GetWindowLong(Handle, GWL_STYLE) and ES_MULTILINE = 0) then SelectAll;
inherited;
FEditBtn.Visible := False;
Invalidate;
end;
{##############################################################################}


Alex44   (2002-11-11 19:24:00) [8]

Sdelajte v Paint (ili chto tam u Vas otvechaet za risovanie) prinuditel"noe prorisovyvanie knopki.


Набережных С.   (2002-11-11 18:29:00) [9]

var
R: TRect;
begin
R:=Rect(2,0,ClientWidth - FButton.Width - 2,ClientHeight + 1);
SendMessage(Handle, EM_SETRECTNP, 0, LongInt(@R));
end;


oss   (2002-11-11 17:23:00) [10]

я не пойму причем тут стиль ХР...
ты EhLib и TBX не пробовал использовать ?
а так посмотри изменение размера и прорисовку,
там и копай


Demon[DZ]   (2002-11-11 17:15:00) [11]

Что никто незнает?


Demon[DZ]   (2002-11-11 16:39:00) [12]


XPEditBtn:


Demon[DZ]   (2002-11-11 16:37:00) [13]

XPEditBtn:


Smithson   (2002-11-11 16:17:00) [14]

Можно и на мыло, но лучше объясни проще и подробнее, что у тебя происходит, из-за чего и чего из этого тебе не надо. Извини, но после в самой правой сторонея понял, что ничего не понял.


Demon[DZ]   (2002-11-11 16:11:00) [15]

Текст компоненты довольно большой.
Могу на мыло.


Smithson   (2002-11-11 16:07:00) [16]

"Дорогие товарищи ученые!
У меня в подвале который год происходит подземный стук. Объясните, плжалуйста, как он происходит..." Это цитата.
Гони код своего компонента, скриншот или попытайся объяснить еще раз, но поняьнее - как для тупых.


Наверх

Титульная страница Поиск, карта сайта Написать письмо