przenoszenie Toolbara

0

Mam 4 Coolbary i ustawione auto size, ze "znikają", gdy nic na nich nie ma. Tylko na jednym jest Toolbar. Jak zrobić, żeby było można go mychą przeciągać na inne Coolbary, tak aby dało to efekt przemieszczenia Toolbara. ?

0

aż mi sie wierzyć nie chce, ale to jest opisane już od dawna: http://4programmers.net/view.php?id=56

[dopisane]

Ups, może to nie dokładnie to o co chodziło, ale znalazłem u siebie na dysku art o tym (użytkownika, który został wykopany):

==BEGIN==
Drag-and-dock(In polish: „przeciągnij i dokuj”) czyli „pływające” paski narzędzi

Biblioteka VCL umożliwia również nieskomplikowaną obsługę mechanizmu drag-and-dock W tym przykładzie wykorzystamy ten mechanizm do utworzenia „pływających” pasków narzędzi. Paski takie mogą być przeciągane i umieszczane w rożnych miejscach na formularzu. Mogą tez znajdować się całkiem poza nimi we własnych oknach narzędziowych. Także główne menu okna można umieści na takim pasku, tak jak to widzimy w Delphi.
Zademonstruje teraz jak łatwo można zastosować pływające paski narzędzi i menu we własnych aplikacjach. Utwórzmy nowy projekt i zapiszmy go na dysku. Kolejną naszą czynnością powinno być ulokowanie na głównym formularzu takiego obiektu który zapewniałby obsługę operacji dokowania pływających pasków narzędzi ich osadzania oraz zdejmowania z wydzielonych obszarów formularza. Teraz Umieść na formularzu komponent ControlBar znajduje się on w zakładce Additional a następnie zmieńmy jego właściwość Align na alTop. Dzięki temu komponent będzie przylegał do górnej krawędzi formularza. Jeśli chcemy mieć na oknie także inne obszary umożliwiające kontrolowanie operacji dokowania pasków narzędzi, to możemy zastosować więcej komponentów TControlBar, a następnie odpowiednio ustawić ich właściwości Align (alLeft, alBotton, alClient, alRight).
Przy okazji zmieńmy domyślne ustawienie atrybutu BewelEdges komponentu TControlBar wpisując False do wszystkich pól tego atrybutu: beLeft, beTop itd.
Właściwość komponentu TControlBar która określa czy może on być celem operacji przeciągania i dokowania, nosi nazwę DockSite i jest typu Boolean. Tę samą właściwość posiadają także inne komponenty dziedziczące po klasie TwinControl, tak wiec również one mogą posłużyć jako obiekty kontrolne operacji dokowania. Np. zamiast TControlBar można zastosować komponent TcollBar znajduje się on w zakładce Win32. Klasy TForm i Tpanel także posiadają takie możliwości.
Następną czynnością jaką wykonamy będzie umieszczenie na obszarze kontrolnym dwóch komponentów TToolBar z zakładki Win32. Pierwszy z nich posłuży do skonstruowania paska menu a drugi paska narzędzi. Umieśćmy je zatem jeden pod drugim a wazie potrzeby dosuniemy je do lewej krawędzi obszaru kontrolnego
Zwróćmy teraz uwagę na właściwość RowSize komponentu TControlBar. Definiuje ona rozmiar jego wiersza. Właśnie przed chwilą umieściliśmy dwa paski narzędzi w dwóch różnych wierszach paska kontrolnego. Inna jego własność RowSnap określa czy paski narzędziowe dokowanie do obszaru kontrolnego będą automatycznie dopasowane do jego wierszy co oznacza że ich położenie oraz rozmiar będą się zmieniać w sposób automatyczny.
Zajrzyjmy teraz do Inspektora Obiektów. Wysokość wiersza obszaru kontrolnego jest ustawiona na 26. Ponieważ komponent TControlBar posiada dwa wiersze to jego wysokość powinniśmy ustawić na 2x26 czyli na 52. Lepiej jednak będzie jeśli zamiast tego zmienimy jego właściwość AutoSize na True. Wówczas rozmiar komponentu zmieni się samoczynnie, a oprócz tego będzie się dostosowywał dynamicznie do zainstalowanych warunków w takcie działania programu. Proponuje od raz ustawić właściwość AutoSize dodanych przez nas pasków narzędzi na True.
Jeśli teraz spojrzymy na wysokość naszych kontrolek TToolBar to się okaże że ten ich wymiar jest mniejszy niż można było oczekiwać nie ma 26 ale 22. Jest tak dlatego że paski narzędzi połażone są w obszarze kontrolnym otrzymały specjalne obramowanie. Po lewej stronie każdego paska widoczny jest uchwyt służący do jego przesuwania bądź przenoszenia. Jeśli chcemy, aby ten uchwyt umożliwiał nam wyciąganie paska z obszaru kontrolnego TControlBar to musimy ustawić atrybuty AutoDrag tego ostatniego na True

Załóżmy iż pasek na którym umieścimy menu formularza pozostanie przez cały czas w obszarze kontrolnym nie będzie wiec paskiem „pływającym”. Natomiast taką cechę będzie posiadał drugi pasek i właśnie nim teraz się zajmiemy. Należy teraz ustawić odpowiednio jego dwie właściwości na DragKind na dkDock, a DragMode na dmAutomatic. Pierwsze ustawienie oznacza iż komponent jest przeciągany po to aby można było dokować dzięki temu będzie on mógł być obsłużony przez dowolną kontrolkę która pełni rolę obszaru dokowania. Natomiast drugie ustawienie powoduje ze kiedy użytkownik chwyci i przesunie kontrolkę automatycznie rozpocznie się operacja przeciągania. To już wszystko co trzeba było zrobić. Teraz zrobię małe podsumowania:

1.Pasek kontrolny(TControlBar)
Allign->alTop
DockSite->True
RowSnap-> True
AutoSize-> True
AutoDrag-> True

2.Pasek menu(ToolBar)
AutoSize->True
Flat->True

3.Pasek narzędzi(TToolBar)
AutoSize->True
Flat->True
DragKind->dkDock
DragMode->dmAutomatic

Aha jeszcze zostało nam uzupełnienie zawartości paska menu i paska narzędziowego. Na początek pamiętamy o ustawieniu właściwości Flat na True. Dodajmy teraz do formularza TMainMenu. Następnie używając Projektanta Menu przygotujmy jego zawartość w taki sposób jak tego będziemy potrzebować (Mam nadzieje ze wiesz jak to się robi a jak nie to jak znajdę czas to opisze to ;)). Ponieważ nasz nowy komponent został domyślnie uznany za główne menu formularza to efekt naszej pracy ukaże się od razu u góry okna nad paskiem narzędzi. Nie o to nam jednak chodziło dlatego zmienimy właściwość Menu formularza usuwając z niej nazwę naszego komponentu. Teraz menu zniknie a my będziemy mogli umieścić je na pasku narzędziowym.
Pasek menu to zwykły pasek narzędziowy tylko tyle ze jego przyciski są powiązane z konkretnymi elementami menu. Aby na przyciskach pojawimy się nazwy elementów menu powinniśmy zmienić wartość atrybutu ShowCaptions paska na true. Następnie należy dodać do naszego paska tyle przycisków ile elementów zawiera poziom menu. Na koniec przypiszmy kolejne elementy menu do poszczególnych przycisków. Służy do tego właściwość przycisków o nazwie MenuItem. Możemy przy tym skorzystać z rozwijalnej listy która jest widoczna w polu tego atrybutu w Inspektorze Obiektów.
Zauważmy że automatycznie uzupełnione zostaną zawartości atrybutu Caption przycisków zgodnie z nazwami powiązanych elementów menu. Gdybyśmy jeszcze chcieli żeby rozmiary przycisków dostosowały się do szerokości wyświetlanej na nich nazwy menu to powinniśmy zmienić wartość atrybutów na AutoSize na True

==END==

Z dobrym pomysłem da się adaptować to do TCoolBar (instead of TControlBar)

1 użytkowników online, w tym zalogowanych: 0, gości: 1