Drag-and-dock - "Pływające" paski narzędzi ? ?

0

Witam.

Nie wiem czy mi sie uda to wyjaśnić poglądowo tylko przy pomocy słow - spróbuje.

Po któtce:

  1. Na komponencie (ControlBar: TControlBar) odpowiednio
    -> ToolBarMenu: TToolBar;
    -> ToolBarICO: TToolBar;

  2. (MenuGlowne: TMainMenu) jest umieszczone na komponencie (ToolBarMenu: TToolBar)

  3. W (MenuGlowne: TMainMenu) jest pozycja (PasekNarzedzi: TMenuItem) o nazwie 'Pasek narzędzi'.Z możliwością odznaczenia - Checked (ma za zadanie

pokazywanie/ukrywanie tools'a (ToolBarICO: TToolBar) w momencie (Click) odznaczenia/zaznaczenia.


procedure TGlownaForma.PasekNarzedziClick(Sender: TObject);
begin
(Sender as TMenuItem).Checked:= not (Sender as TMenuItem).Checked ;
if paseknarzedzi.Checked=true then
ToolBarICO.Visible:=true
else

            ToolBarICO.Visible:=false;

end;


  1. Pasek Komponenty (ToolBarICO: TToolBar), ma możliwość przeciagania (staje sie wówczas oknem), suwania (po ControlBar: TControlBar), chyba wiecie o co chodzi.

No i tutaj zaczynają sie "kwiatki". Wszystko działa dopóki kiedy uchwyce myszką (ToolBarICO: TToolBar) i przeciągne, powiedzmy gdzieś na forme. Stanie sie

małym oknem z moziwością zamkniećia (x).
Zamykam ją i TERAZ :

chodzi własnie aby w tym momencie automatycznie w menu -> (PasekNarzedzi: TMenuItem)

[cya] [cya] [cya] [cya] ---------------------
|V Pasek narzędzi |

automatycznie znikał (V) - symbol zaznaczenia opcji (Checked).

W jakim zdarzeniu mam to zdefiniowac, kazde zawodzi dla komponentu (ToolBarICO: TToolBar). Chociażby w procedurze:

procedure TGlownaForma.ToolBarICOExit(Sender: TObject);

Zadanie trywialne tylko ...???

Gdzie zdefiniować? Skorzystać z construktora? jak? Napisać procedure.
Dajcie jakieś sugestie.

MenuGlowne: TMainMenu;
PasekNarzedzi: TMenuItem;
ControlBar: TControlBar;
ToolBarMenu: TToolBar;
ToolBarICO: TToolBar;

THX

0

???
Czuję się, jakbym uczył się węgierskiego z angielskiej książki nie znając oby języków. Możesz to dokładniej napisać? Jeżeli dobrze zrozumiałem to:
gdy zamykasz okno (Close) to PasekNarzedzi.Checked := false;
O to chodziło?

0

Zablokuj zamykanie przez przycisk (x) i będzie dobrze

0

ja to robiłem tak (jeśli dobrze zrozumiałem o co Ci chodzi) :
to jest troche na obkoło ale wtedy potrzebowałem sprawnegorozwiązania ( a ono działa )
mam TControlBar a na nim TTolBar (z przyciskami) jak otwierałem Menu Widok aby włączyć/ wyłączyć któryś pasek to w zdarzeniu OnClick tego Menu (ale tego głównego Widok) podstawiałem :

StandardMenunChb.Checked := StandardToolBar.Visible;

tak czy siak działa.

Wiem że to pewnie ma być inaczej .... A swoją drogą to ostatnio ściągnąłem skądś (może z tąd) jakąś gotową formenke z pływającymi paskami. Może tam znajdę odpowiedź.

0

Wszyscy przedmówcy W OGÓLE nie zrozumieli pytania, a dało się je zrozumieć. Trzeba obsługiwać komunikat Windowsa (coś w guście WM_HIDE). TToolBar ma właściwość Handle, która zawiera uchwyt okna, właśnie z tego uchwytu trzeba przejmować komunikaty i reagować na odpowiedni.

0

Nie wiem, czy będę należeć do tych wszystkich, którzy nie zrozumieli pytania, ale raz kozie śmierć ;-)
Nie da się tego obsłużyć przy zdarzeniu PasekNarzedziClose ?
Jeżeli nie, to znaczy że chyba nie zrozumiałem i trudno, ale może ...

0

Witam.
Problem juz rozwiazalem (akurat "poleciało" z grupy pl.comp.lang.delphi - bez krypto-reklamy rzecz jasna, każdy orze jak moze :) )

Rozwiazanie:

Mozna skożystać z klasy TAction czyli akcji. Komponent ActionList na zakładce Standard.

Dajemy na forme komponent.
Podwójny-klik na komponencie (ActionList).

Następnie definujemy akcje. Przypuścmy (nazwa) <font color="green">PasekNarzędzi_Action</span>. W "Caption" podajemy nazwe tą samą (ta sama w rozumieniu - ustawiony Caption w MainMenu) - czyli "Pasek narzędzi. Wartość Checked:=true, odpowiednio Hit ".coś ..|.coś tam..",

Podwójny-klik na komponent MainMenu. Wypieramy nasz "Pasek narzędzi".
Na samej górze w Object Inspector (powinno być w <font color="red">kolorze bordowym lub czerwonym</span> :) Action) Klikamy i wybieramy nasz <font color="green">PasekNarzędzi_Action</span>.

Majac dalej zaznaczony w Properties naszą akcje, przechodzimy na sakładke Events.

W OnExecute wpisujemy :
PasekNarzedzi_Action.Checked := not PasekNarzedzi_Action.Checked;
ToolBarICO.Visible := PasekNarzedzi_Action.Checked;

A w OnUpdate:

PasekNarzedzi_Action.Checked := ToolBarICO.Visible;

I sprawa załatwiona :) Aha ..Procedure zdarzenia "OnClick" można już spokojnie wykasować, albo wykożystać do innych celów

Pozdrawiam i dzieki mimo to za pomoc, pewnie tu zaniedługo zajrze :)

[cya]

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