Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.10.2012, 22:13
Heneken Heneken вне форума
Новичок
 
Регистрация: 11.09.2011
Сообщения: 73
Версия Delphi: Delphi XE6
Репутация: 10
По умолчанию Динамический размер панели

Возможно не тот топ, но поиск мне не дал толкового результата. (Может не верно искал конечно). Вопрос,даже не вопрос, а обмен опытом.
Кто нибудь знает функции или свои наработки для эффективной работы с панелями. В частности динамические размеры, перетаскивание панели по самой форме. Может какой компонент есть или специальная "панель". Сплиттер лесом сразу.
Вот для перетаскивание хороший код(В событие по нажатию кнопки мыши).
Код:
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;
Аналогично и для правой панели только меняет переменную scrols_left_right
Как видно слишком громоздко и замудрено..но код выполняется без мерцаний и вылетов,глюков и т д.
Может есть и другое решение, прсото я его незнаю. Так что подскажите)
Ответить с цитированием
  #2  
Старый 19.10.2012, 22:18
Heneken Heneken вне форума
Новичок
 
Регистрация: 11.09.2011
Сообщения: 73
Версия Delphi: Delphi XE6
Репутация: 10
По умолчанию Ошибка

Во втором листинге кода ошибка(менял имя панели,в этом листе не заменил) Ну и не указана процедура .Вот так верно
Код:
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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter