Méthode ou composant pour gestion des onglets comme illustator/photoshop

cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009 - 15 mars 2008 à 19:10
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009 - 13 juin 2008 à 15:48
Bonjour,

Je cherche à obtenir le même système de gestion d'onglets de barres d'outils que dans Illustrator ou photoshop. Les onglets peuvent se déplacer entre chaque fenêtres, se supprimer, ou se séparer de leur fenêtre d'origine. Il y a je pense une gestion "drag and drop" mais je ne sais pas comment obtenir le même comportement.

Quelqu'un a t'il une idée sur les méthodes à appliquer ? Peut-être existe t'il un composant qui réalise tout ça ?

Merci

Orélien.

4 réponses

Utilisateur anonyme
15 mars 2008 à 20:09
Salut

Regarde du coté du TControlBar (Onglet Standard) et TToolBar (Onglet Win32)
DragKind doit etre à DkDock et DragMode à DmManual si je me souviens bien.
0
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009
15 mars 2008 à 20:43
En fait, je suis parvenu à déplacer les onglets entre eux dans un composant TPageControl mais pas d'un TPageControl à un autre et encore moins avec un composant TTabSet qui m'intérressait le plus.

Orélien.
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
16 mars 2008 à 15:28
Salut,


Regarde ceci : http://delphi.developpez.com/faq/?page=pagecontrol


La deuxième solution permet de déplacer dans un autre PageControl.


Voici un "mix" des deux solutions que j'ai fait au plus simple :


La propriété DragMode des PageControl = dmManual
3 procédures pour PageControl1 : OnMouseDown, OnDragOver, OnDragDrop
Le ou les autres PageControl utilisent les procédures de PageControl1.


* * *


function GetTabIndex(APageControl:TPageControl; MoveToOther: boolean; X, Y: Integer): Integer;
begin
  Result := APageControl.IndexOfTabAt(X,Y);
  if MoveToOther and (Result >= 0) then
    with APageControl.TabRect(Result) do
      if X > ((Left + Right) div 2) then Inc(Result);
  // ceci permet d'insérer avant ou après un onglet suivant la position de la souris.
end;


procedure TForm1.PageControl1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    TPageControl(Sender).BeginDrag(False);
end;


procedure TForm1.PageControl1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TPageControl;
end;


procedure TForm1.PageControl1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  Tab: TTabSheet;
  TabIndex: integer;
begin
  TabIndex:= GetTabIndex(TPageControl(Sender), (Sender <> Source), X, Y);
  if TabIndex >= 0 then
  begin
     if TPageControl(Source) = TPageControl(Sender) then
     begin
        if TPageControl(Sender).ActivePage.PageIndex <> TabIndex then
           TPageControl(Sender).ActivePage.PageIndex := TabIndex;
     end
     else
     begin
        Tab:= TPageControl(Source).ActivePage;
        Tab.PageControl:= TPageControl(Sender);
        Tab.PageIndex:= TabIndex;
        TPageControl(Sender).ActivePage:= Tab;
     end;
  end;
  TPageControl(Source).EndDrag(true);
end;


* * *


A +
Thierry
0
cs_orelien Messages postés 137 Date d'inscription dimanche 7 juillet 2002 Statut Membre Dernière intervention 11 janvier 2009
13 juin 2008 à 15:48
Bonjour,


Désolé de répondre aussi tard, j'ai finalement opté dans l'urgence pour une gestion des onglets avec un tpagecontrol. Malgré cela, je me pose toujorus la question à mettre en place le même système pour obtenir un visuel tel que le composant ttabset peut donner.

Illustrator ou encore photoshop utilisent un composant similaire avec intéraction entre eux de manière à déplacer les onglets entre eux, sur de nouelles fenêtres.

Si quelqu'un à une solution pour btenir le même système (composant, méthode, dessin sur un tpagecontrol). J'ai tenté de redessiner sur un pagecontrol en plus du code précédent mais je n'arrive pas à ôter les bordure et à obtenir l'équivalent d'un tabset.

Merci !

Orélien.
0
Rejoignez-nous