Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

Окно с изменением размера   Найти похожие ветки 

 
REA ©   (2003-09-16 14:46) [0]

Хочется сделать окно редактирования от TCustomEditBox, но с возможностью задания его размера пользователем (как в Excel при вводе комментария к ячейке). Попытка вставить стиль WS_SIZEBOX приводит к каким-то не таким результатам - появляется рамка (она в принципе не нужна), но размер не изменить. Есть варианты?
Можно наверно повесить обычное окно и в него уже Edit, но хочется чтобы рамочка была как в Excel или вообще без нее. Можно и руками нарисовать конечно, но нет ли варианта попроще?


 
ZEE ©   (2003-09-16 14:51) [1]

а почему бы не поместить твой Edit на Panel (чтоб рамочка была видна, хотя бы пару пикселов) и в панели обрабатывать OnMouseDown, OnMouseMove, OnMouseUp


 
ZEE ©   (2003-09-16 14:54) [2]

или другой вариант:
поместить на форму вместе с Edit еще восем Panel (маленькие черненькие квадратики - ну как в Дельфи) и у них также обрабатывать события от зверя...


 
REA ©   (2003-09-16 14:57) [3]

второй вариант отметаем как извращение, а вот первый в принципе жизнеспособен, но придется делать прорисовку процесса масштабирования как Splitter - не очень хорошо и много писанины.
Хочется использовать возможности OS, а не писать все самому.


 
REA ©   (2003-09-16 21:22) [4]

Ну в самом то редакторе нечто подобное сделано - никто не знает как? Подойдут любые варианты.


 
REA ©   (2003-09-17 10:15) [5]

Нашел какой-то классик TToolWindow - кто нибудь использовал? Можно для топика приспособить?


 
KSergey ©   (2003-09-17 12:11) [6]

Можно для топика приспособить?

Раз он есть - может попробовать? ;)

Я так и не понял нифига вопроса. Надо чтобы можно было изменять размеры "квадратиками" и мышю или при вводе текста Edit должне сам раздвигаться?

Если "квадратиками" - см., например, вот что:

http://z-ol.chat.ru/cmp.htm

TStretchHandles Прозрачный компонент, применяемый для перемещения визуальных элементов формы и изменения их размеров во время работы программы. Во время работы от визуально очень напоминает редактор Delphi


 
REA ©   (2003-09-17 12:37) [7]

Детализирую: есть компонент мой в котором есть некие надписи, которые надо редактировать inplace с многострочным editbox. Мне поазалось удобным редактирование как в Excel комментария либо как в Word надписи в рамке. Т.е. размер надписи пользователь может задать мышью. В принципе это похоже на то, что в Delphi в design mode. Можно с квадратиками, можно без, но без стандартной thickframe рамки (уж больно коряво смотрится на компоненте).


 
REA ©   (2003-09-17 12:38) [8]

PS: Спасибо за ссылку - сейчас посмотрю. Я уже все Torry перерыл.


 
REA ©   (2003-09-17 13:12) [9]

Посмотрел. Неплохой код, но есть типичные ошибки. Например не обрабатывается WMCancel - при переключении по AltTab в процессе изменения размера на экране остается мусор. Можно использовать данный подход, но вероятно можно проще и короче - все таки мне нужна не столь универсальная вещь.


 
KSergey ©   (2003-09-17 13:17) [10]

А может тогда попробовать в этом компоненте (он же все равно потомок окна?) обрабатывать WM_NCHITTEST? (вроде так зовется) Ну и на краю рамки возвращать, что это изменяемый бордюр - возможно винда сама тогда все чудесно устроит...
но надо пробовать, просто мысли в слух. На Edit"е такого не пробовал.


 
Игорь Шевченко ©   (2003-09-17 13:53) [11]

сделать окошко в виде рамки, например, регионом, и при изменении его размеров менять размер Edit"а.


 
REA ©   (2003-09-17 14:54) [12]

Я уже тоже допер WM_NCHITTEST использовать с Memo. Пока не доделал, но результат устраивает. Что то я позабыл про это сначала.


 
REA ©   (2003-09-17 16:18) [13]

Код получился такой:
Procedure TSizeableMemo.WMNCHitTest(var Message: TWMNCHitTest);
Const Delta = 4;
Var Res: Longint;
begin
inherited;
With Message, BoundsRect, Parent.ScreenToClient(Point(XPos, YPos)) Do
Begin
Res := HTMAXBUTTON;
If Abs(Y-Top)<Delta Then Res := HTTOP Else
If Abs(Y-Bottom)<Delta Then Res := HTBOTTOM;
If Abs(X-Left)<Delta Then Inc(Res) Else
If Abs(X-Right)<Delta Then Inc(Res, 2);
If Res>HTMAXBUTTON Then Result := Res;
End;
End;

Всем спасибо.


 
pasha_golub ©   (2003-09-17 16:29) [14]

Я вот так сделал. Переписал CreteParams, может поможет

procedure TDBGridInplaceEdit.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);

Params.Style := Params.Style or WS_border{or WS_THICKFRAME} or ES_AUTOVSCROLL;
Params.Style := Params.Style and not ES_AUTOHSCROLL;;
end;


 
pasha_golub ©   (2003-09-17 16:31) [15]

Это я мультистрочный inplaceedit для ДБГрид сделал, летает на ура


 
REA ©   (2003-09-17 22:17) [16]

Я так примерно и делал сначала, но мне показалось некрасиво - слишком толстая рамка в документе на белом фоне не смотрится.



Страницы: 1 вся ветка

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
14-96391
Герцог Замухрышкин
2003-09-11 17:08
2003.09.29
Все. Бросаем писать ветки про бросание. Прямо сейчас.


14-96452
KSergey
2003-09-10 08:18
2003.09.29
Про мушкетеров


1-96248
oduvan
2003-09-16 21:31
2003.09.29
Компонент для чата


3-96063
Step[B.M.]
2003-09-07 09:40
2003.09.29
Какие ограничения у нелицензированой IBPlus?


6-96323
Е-Моё имя
2003-07-29 13:20
2003.09.29
настройка показа картинок для TWebBrowser