Bonjour,
Connaissez vous une technique qui permettrait de déplacer un panel dans une fenêtre comme si c'était une fenêtre?
J'ai testé bon nombre de méthodes 'maison' mais à chaque fois quelquechose cloche.
Merci de vos idées![]()
Bonjour,
Connaissez vous une technique qui permettrait de déplacer un panel dans une fenêtre comme si c'était une fenêtre?
J'ai testé bon nombre de méthodes 'maison' mais à chaque fois quelquechose cloche.
Merci de vos idées![]()
Attention le .NET sur PDA peut causer des chutes de cheveux
Bonjour la Seyne sur Mer,
Tu serais pas chez Xzeos ?
Quels sont les méthodes que tu as utilisé ?
Jean-Baptiste, vieux membre éclairé à la bougie
-----
www.e-jbb.net : Écriture et lecture numérique
---
Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac
Tu peux t'inspirer de cela.
Dans un nouveau projet, un seul formulaire et un Tpanel
Cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Déclarations privées } selected: boolean; public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin selected := false; end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin selected := true; end; procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if selected and (Sender is TPanel) then begin (Sender as TPanel).Left := (Sender as TPanel).Left + x; (Sender as TPanel).Top := (Sender as TPanel).Top + y; end; end; procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin selected := false; end; end.
Pensez à utiliser les tags dans le titre.
Avant de poser une question reportez-vous à la FAQ Delphi
Respectez les règles du forum.
Bonjour,
Merci pour ton code, c'est en effet tres similaire à ce que j'avais fait, je refait des tests avec cette méthode.
Pour gibet_b ben LA SEYNE SUR MER C la ou j'habite, moi c harry... Non, sui pas chez Xzeos![]()
Au fait c quoi comme boite Xzeos?
Par rapport à mes méthodes ... ben sont un peu complexes à expliquer... faudrait une bonne dizaine de pages pour expliquer tout ca, je vais essayer le code de Pascal Jankowski avant![]()
Merci, à demain![]()
Attention le .NET sur PDA peut causer des chutes de cheveux
C'est bon, merci!!! J'hallucine : j'ai fait des trucs super compliquées dans tous les sens alors que c'était super simple![]()
Merci beaucoup![]()
Attention le .NET sur PDA peut causer des chutes de cheveux
Xzeos, c'est une boite d'info qui est justement à La Seyne Sur Mer :-) J'avais bien compris que c'était là ou tu habitais. C'est eux qui font XnView, ExpertPDf, Universal PDF Suite, Ability, Superbase, etc. Ils font du développement, de la traduction de logiciel, tout plein de chose. C'est la ou j'ai fait mes stages...
Tiens nous au courant de tes essais.
Jean-Baptiste, vieux membre éclairé à la bougie
-----
www.e-jbb.net : Écriture et lecture numérique
---
Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac
Bonjour Pascal,Envoyé par Pascal Jankowski
J'ai copié ton projet pour l'essayer, mais il ne fonctionne pas !!!Pourquoi ?
J'utilise Delphi 7. As tu peut être une autre manière de faire ?
Merci pour ta réponse,
Christelle
Bonsoir Christelle,
Et avant tout, bienvenue sur dvp.
A mon avis tu as recopié dans delphi, le projet sans redéfinir les liens avec les événements dans l'inspecteur d'objet.
Je m'explique :
Dans le code tu trouves un FormCreate alors dans l'inspecteur d'objet tu sélectionnes l'événement onCreate puis tu le relies à la méthode FormCreate et ainsi de suite pour tous les autres événements que tu retrouves dans le projet, soit encore pour les événements Panel1MouseDown, Panel1MouseMove et Panel1MouseUp.
Cordialement
Pensez à utiliser les tags dans le titre.
Avant de poser une question reportez-vous à la FAQ Delphi
Respectez les règles du forum.
Merci,
Effectivement ça marche !
Je débute en Delphi : nous utilisons Delphi en cours d'informatique et j'ai un projet à rendre prochaînement.
Ce forum est très intéressant: il m'a beaucoup aidé pour le sql et les tables.
Christelle
on peut adapté la méthode Pascal Jankowski par cele sité ici: http://www.developpez.net/forums/sho...d.php?t=157392
mais au lieu d'affecté le variable selected en affect directement un evenemnet de déplacement de la souri dans onmousedown et dans onmouseup en lui donne un nil
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
Edam
Est-ce le code que tu voulais que j'écrive ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private FcanMove: boolean; procedure SetcanMove(const Value: boolean); { Déclarations privées } public { Déclarations publiques } property canMove: boolean read FcanMove write SetcanMove; procedure doMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); procedure doMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure doMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.SetcanMove(const Value: boolean); begin FcanMove := Value; end; procedure TForm1.doMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); begin if FcanMove then if Sender is TPanel then begin TPanel(Sender).Left := TPanel(Sender).Left + X; TPanel(Sender).Top := TPanel(Sender).Top + Y; end; end; procedure TForm1.doMouseDown; begin FcanMove := True; end; procedure TForm1.doMouseUp; begin FcanMove := False; end; // Assignation des événements procedure TForm1.FormCreate(Sender: TObject); begin Panel1.OnMouseMove := doMove; Panel1.OnMouseDown := doMouseDown; Panel1.OnMouseUp := doMouseUp; end; end.
Pensez à utiliser les tags dans le titre.
Avant de poser une question reportez-vous à la FAQ Delphi
Respectez les règles du forum.
non pas exactement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TIntegerArray = array of Integer; TForm1 = class(TForm) Panel1: TPanel; procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Déclarations privées } Procedure Mon(Sender: TObject; Shift: TShiftState; X, Y: Integer); public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.DFM} var s:string; pos:TPoint; procedure TForm1.Mon; begin TPanel(Sender).Left := TPanel(Sender).Left +X-pos.X; TPanel(Sender).Top := TPanel(Sender).Top + Y-pos.Y; end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not Assigned(TPanel(Sender).OnMouseMove) then panel1.OnMouseMove:=Mon; pos.X:=x; pos.Y:=y; end; procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(TPanel(Sender).OnMouseMove) then TPanel(Sender).OnMouseMove:=nil; end; end.
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
Ok je vois ce que tu voulais dire maintenant soit faire l'économie de l'événement onMouseMouve.
Je me permets de modifier quelque peu ton code afin de passer en property le TPoint. Entre nous je n'aime pas trop les variables globales sauf si elles sont justifiées.![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private Fpos: TPoint; procedure Setpos(const Value: TPoint); { Déclarations privées } public { Déclarations publiques } property pos:TPoint read Fpos write Setpos; Procedure mouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.Setpos(const Value: TPoint); begin Fpos := Value; end; procedure TForm1.mouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not (Sender is TPanel) then exit; TPanel(Sender).Left := TPanel(Sender).Left +X-pos.X; TPanel(Sender).Top := TPanel(Sender).Top + Y-pos.Y; end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not Assigned(TPanel(Sender).OnMouseMove) then panel1.OnMouseMove:=mouseMove; pos := Point(x,y); end; procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(TPanel(Sender).OnMouseMove) then TPanel(Sender).OnMouseMove:=nil; end; end.
Pensez à utiliser les tags dans le titre.
Avant de poser une question reportez-vous à la FAQ Delphi
Respectez les règles du forum.
j'ai trouvé sa aussi dans http://www.developpez.net/forums/sho...d.php?t=158198
trés intérésant ,,non???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.Panel1MouseDown(Sender: TObject; Button:TMouseButton; Shift:TShiftState; X,Y: Integer); const SC_DragMove = $F012; // le nombre qui deplace begin ReleaseCapture; panel1.perform(WM_SYSCOMMAND, SC_DragMove, 0); end;![]()
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
Voire même plus rapide.
Pensez à utiliser les tags dans le titre.
Avant de poser une question reportez-vous à la FAQ Delphi
Respectez les règles du forum.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager