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![]()
Bonjour la Seyne sur Mer,
Tu serais pas chez Xzeos ?
Quels sont les méthodes que tu as utilisé ?
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.
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![]()
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![]()
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.
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
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
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.
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.
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.
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;![]()
Partager