Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Имеющие опыт борьбы с TSplitter


Автор: кварк 6.11.2002, 22:07
На форме нужно сделать вертикальный и горизонтальный сплиттеры. Что за глюки? Как добиться поведения как в TheBat - там это реализовано нормально? Или я чего не понимаю в функционировании сплиттеров?

Во-первых: для того, чтобы сделать один "движок", я использую два объекта TSplitter (выровненных по левому краю). Иначе эта тварь (извините) таскаться отказывается.

Во-вторых: при создании второго "движка" (уже горизонтального опять-таки еще два объекта, выравнивание по верхней кромке) получаются глюк: во время его перетаскивания разделяющая линия отрисовывается и на левой половине формы, отделяемой вертикальным сплиттером (объяснить я это могу: выравнивание такое, вопрос в том, как это убрать).

P.S. Пытался сделать свой "движок" на основе TShape (прямоугольник).
OnMouseMove формы:
 begin
    if dragging then shape1.Top := y + dy
 end
(тут dragging и dy - глобальные переменные, y - параметр OnMouseMove)
Получилось, что этот прямоугольник перемещается ровно в два раза медленнее, чем мышь. Как это объяснить?

Заранее благодарен за советы.

Автор: Vit 6.11.2002, 22:57
Я использую Splitter от RxLib -всё нормально. Там только 3 свойства которые надо правильно поставить - align, FirstControl, SecondControl...

Автор: кварк 6.11.2002, 23:37
Спасибо, добрый человек! :)

Автор: кварк 6.11.2002, 23:41
P. S. Но тема еще не закрыта: я еще надеюсь найти здесь людей, пользующихся стандартным TSplitter.

Автор: neutrino 6.11.2002, 23:56
Вот я делал такой движ ок Drag&Drop:
Код

procedure TShape1.OnMouseDown(X, Y: Integer; MButton: TMopuseButton ... );
begin
 if mButton = mbLeft then
 begin
   Dragging := True;
   OldX := X;
   OldY := Y;
 end;
end;

procedure TShape1.OnMouseMove(X, Y: Integer; ShiftState: TShiftState ... );
begin
 if Dragging then
 begin
   Left := (Left + X) - OldX;
   Top := (Top + Y) - OldY;
 end;
end;

procedure TShape1.OnMouseUp(X, Y: Integer ... );
begin
 if Dragging and (Button=mbLeft) then
 begin
   Dragging := False;
 end;
end;

Но это схематично, конечно ...
А так я не понимаю почему у тебя проблемы, кинь мне на мыло свой исxодник.

Автор: rhf 7.11.2002, 01:23
не понятно, че у тебя там не работает с tSplitter
делать так:
кидаешь контрол(tPanel например) ставишь выравнивание(align) по какому надо краю
потом кидаешь еще один контрол с align=alClient
вот и все.....

теперь внутри любого контрола сделай аналогично :)

Автор: кварк 10.11.2002, 17:32
RHF, спасибо огромное!

Не знаю, как ты меня понял, но это - именно то, о чем я спрашивал. И как я раньше до этого не додумался?

Всем ответившим - спасибо. Просто здорово, что вы есть!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)