Méthode ou composant pour gestion des onglets comme illustator/photoshop
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009
-
15 mars 2008 à 19:10
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 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.
A voir également:
Méthode ou composant pour gestion des onglets comme illustator/photoshop
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 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.
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;
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 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.