![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Возможно не тот топ, но поиск мне не дал толкового результата. (Может не верно искал конечно). Вопрос,даже не вопрос, а обмен опытом.
Кто нибудь знает функции или свои наработки для эффективной работы с панелями. В частности динамические размеры, перетаскивание панели по самой форме. Может какой компонент есть или специальная "панель". Сплиттер лесом сразу. Вот для перетаскивание хороший код(В событие по нажатию кнопки мыши). Код:
procedure TFORM_GLAV.sh_no_speeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); const SC_DRAGMOVE = $F012; begin ReleaseCapture; Timage.ControlStyle:=Timage.ControlStyle + [ csOpaque ];//Если на форме Timage sh_no_spee.Perform(WM_SYSCOMMAND, SC_DRAGMOVE , 0);//sh_no_spee-Компонент для перетаскивания,будь то панель или TEdit неважно end; Вот код динамики(не весь,только для ширины и высоты) Код:
var poz_W_p,poz_H_p,poz_w,poz_h:integer; begin if (scrols_bot_top=true) or(scrols_left_right=true) then begin poz_W_p:=mouse.CursorPos.X-FORM_GLAV.Left; poz_H_p:=mouse.CursorPos.Y-FORM_GLAV.Top; poz_w:=poisks.left+poisks.width; poz_h:=poisks.height+poisks.Top; if ((poisks.width>560)and(poz_W_p<poz_w) and (scrols_left_right=true)and (scrols_bot_top=false))or((poisks.width<290)and(poz_W_p>poz_w)and (scrols_left_right=true)and (scrols_bot_top=false)) or((poisks.Height<220)and(poz_H_p>poz_h)and (scrols_left_right=false)and (scrols_bot_top=true))or((poisks.Height>550)and(poz_h_p<poz_h)and (scrols_left_right=false)and (scrols_bot_top=true))then begin tajmer.Enabled:=true; end else if (poisks.width<290) or(poisks.width>560)or(poisks.Height<220)or(poisks.Height>550) then tajmer.Enabled:=false else tajmer.Enabled:=true; end; end; Код таймера Код:
procedure TFORM_GLAV.tajmerTimer(Sender: TObject); begin if tajmer.Enabled then begin if (scrols_left_right=true)then sh_no_spee.width:=mouse.CursorPos.x-FORM_GLAV.left-sh_no_spee.left; if (scrols_bot_top=true) then sh_no_spee.Height:=mouse.CursorPos.Y-FORM_GLAV.Top-sh_no_spee.top-30; end; end; Где scrols_left_right и scrols_bot_to глобальные переменные boolean На краях формы для "растягивания" scrols_bot_top снизу и справа находятся 2 панели(при наведении на которые меняеться курсор) В событиях нажатия мыши у панелей код (нижняя панель нажатие) Код:
procedure TFORM_GLAV.PANEL_BOTMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin scrols_bot_top:=true; end; Код:
procedure TFORM_GLAV.PANEL_BOTMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin scrols_bot_top:=false; obnovka.Enabled:=false; if (sh_no_spee.width<290) then sh_no_spee.Width:=290; if (sh_no_spee.width>560) then sh_no_spee.Width:=560; if (sh_no_spee.Height<220) then sh_no_spee.Height:=220; if (sh_no_spee.Height>550)then sh_no_spee.Height:=550; end; Как видно слишком громоздко и замудрено..но код выполняется без мерцаний и вылетов,глюков и т д. Может есть и другое решение, прсото я его незнаю. Так что подскажите) |
#2
|
|||
|
|||
![]() Во втором листинге кода ошибка(менял имя панели,в этом листе не заменил) Ну и не указана процедура .Вот так верно
Код:
procedure TFORM_GLAV.eventes_formsMessage(var Msg: tagMSG; var Handled: Boolean); var poz_W_p,poz_H_p,poz_w,poz_h:integer; begin if (scrols_bot_top=true) or(scrols_left_right=true) then begin poz_W_p:=mouse.CursorPos.X-FORM_GLAV.Left; poz_H_p:=mouse.CursorPos.Y-FORM_GLAV.Top; poz_w:=poisks.left+poisks.width; poz_h:=poisks.height+poisks.Top; if ((sh_no_spee.width>560)and(poz_W_p<poz_w) and (scrols_left_right=true)and (scrols_bot_top=false))or((sh_no_spee.width<290)and(poz_W_p>poz_w)and (scrols_left_right=true)and (scrols_bot_top=false)) or((sh_no_spee.Height<220)and(poz_H_p>poz_h)and (scrols_left_right=false)and (scrols_bot_top=true))or((sh_no_spee.Height>550)and(poz_h_p<poz_h)and (scrols_left_right=false)and (scrols_bot_top=true))then begin tajmer.Enabled:=true; end else if (sh_no_spee.width<290) or(sh_no_spee.width>560)or(sh_no_spee.Height<220)or(sh_no_spee.Height>550) then tajmer.Enabled:=false else tajmer.Enabled:=true; end; |