Deplacer un composant

Résolu
ffomnislash Messages postés 26 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 26 août 2006 - 1 nov. 2005 à 11:40
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 3 nov. 2005 à 15:46
hello ;p



j'ai un composant Tcapture qui affiche un flux videos provenant d'une webcam. Cette classe herite de TcustomControl.



J'aimerais que l'utilisateur puisse deplacer ce composant. Pour cela il
faudrait qu'il clique sur le composant, bouge la souris puis relache le
bouton de la souris.



C'est possible de réaliser ca avec Delphi ?



merci d'avance.

14 réponses

DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
1 nov. 2005 à 23:12
Allez, Vlan !

Création dynamique :
MyArrayOfCapture.Capt[i]:=Tcapture.Create(nil);

Dans la foulée....

MyArrayOfCapture.Capt[i].OnClick:=CaptureArrayOnClick;

Où CaptureArrayOnDblClick, c'est le nom de la fonction qui gerera le click pour tout tes Tcapture (fonction que tu créées dans un coin de ton prog) et tu devras déterminer quel Tcapture était visé.

C'est juste une piste.
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
2 nov. 2005 à 23:44
delphiprog effectivement une erreur de recopie de la procedure que j'utilise la procedure initiale était:

if Tag= 0 then exit;

Top:=Top+Y;

if Top< 0 then top:=0;

if Top>ModuleDeCommande.Height-Height-32 then

Top:=ModuleDeCommande.Height-Height-32 ;

Left:=Left+X-Width div 2;

if Left<0 then Left:=0;

if Left>ModuleDeCommande.Width -Width then

Left:=ModuleDeCommande.Width-Width ;

ref : deplacement de la fenetre de gestion de programme du module de
commande!! j'ai voulu remplacer ModuleDeCommande par Form1 et je ne
suis planté

il faut donc lire:

procedure TForm1.MoncomposantMouseMove(Sender: TObject;

Shift: TShiftState; X, Y: Integer);

begin

with sender as TMoncomposant do

begin

if Tag =0 then exit; // sortie si pas initialisé

Top: = Top+Y;

if Top< 0 then top: =0;

if Top>Form1.Height-Height-32 then Top:= Form1 .Height-Height-32 ;

Left: =Left+X-Width div 2;

if Left<0 then Left:= 0;

if Left>Form1.Width -Width then Left: =Form1.Width-Width ;

end;



désolé pour le désagréement



end;



jlen
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
1 nov. 2005 à 12:01
salut tu peux deplacer un composant en cliquant desus .

utilises le evenement OnMouseDown pour initialiser le depalcement,
OnMouveMove pour visualiser le deplacement et OnMouseUp ppour memoriser
la position

ça peut de donner quelque chose comme cela:

procedure TForm1.MoncomposantMouseDown(Sender: TObject;


Button: TMouseButton; Shift: TShiftState; X, Y: Integer);


begin


Moncomposant.Tag:= 1; // iniatlise le deplacement


end ;

procedure TForm1.MoncomposantMouseMove(Sender: TObject;

Shift: TShiftState; X, Y: Integer);

begin

with sender as TMoncomposant do

begin

if Tag =0 then exit;// sortie si pas initialisé

Top:= Top+Y;

if Top< 0 then top: =0;

if Top>TForm1.Height-Height-32 then Top:= TForm1.Height-Height-32 ;

Left:=Left+X-Width div 2;

if Left<0 then Left: =0;

if Left>TForm1.Width -Width then Left:= TForm1.Width-Width ;

end ;



end;





procedure TForm1.MoncomposantMouseUp(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

Moncomposant.Tag: =0;



end;

dans cet exemple lorsque l'on commence le deplacement le curseur
se place en haut au milieu du composant. Les valeurs seront
certainement a ajuster.

bonne prog
0
ffomnislash Messages postés 26 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 26 août 2006
1 nov. 2005 à 12:45
merci de ton aide, je testerait ca dans la journée ;p
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
1 nov. 2005 à 14:15
Plutot que de jouer avec le tag dans les MouseUp et MouseDown, tu peux aussi tester l'appui maintenu d'une touche dans le MouseMove:

if (ssLeft in Shift) //t'es en train de remuer la
//souris avecle bouton gauche
//enfoncé...donc y a ssRight de
//dispo aussi..
then "move le composant";

gnh !
0
ffomnislash Messages postés 26 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 26 août 2006
1 nov. 2005 à 18:12
Arf je me retrouve face à un autre pb n'étant pas lié au déplacement.



Je n'utilise pas mon composant Tcamera comme un composant. Le probleme
c'est que l'utilisateur peut en enlever/en ajouter, je ne sais donc pas
combin en mettre lors de la création de l'épplication.



J'utilise donc un tableau de composant Tcapture, et je cré/supprime des cases de ce tableau.



Mon probleme est donc, comment je peut lier un evenement à un composant utilisé de cette facon?



dsl mais je ne connait pas vraiment grand chose a Delphi :p
0
ffomnislash Messages postés 26 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 26 août 2006
2 nov. 2005 à 10:22
ok merci, la 1ere ligne je l'avais, c'est la 2eme qu'il me manquait.



Je vous remercie tous. Je mettrais tous ceci en place dans la journée ou demain et je validerait le sujet si tous se passe bien.
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
2 nov. 2005 à 11:37
Mais dans l'évenement, tu ne dois pas mettre Capture1.[...] mais (Sender as TCapture).[...] .
Le parametre Sender spécifie l'objet qui à déclenché l'évenement.
(Sender as TCapture) permet de le transtyper en TCapture pour pourvoir utiliser ses propriétés.

@ ++ Flo

Si tu ne te plantes pas ......
tu ne poussera jamais
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
2 nov. 2005 à 12:11
Achtung aussi au nombre de Tcapture dont tu autorises la création, c'est que ca va bouffer des ressources cpu/system très vite.

gnh.....Plouf. !
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
2 nov. 2005 à 23:29
Par la même occasion, voir aussi :

How to Move and Resize Controls at Run Time




Jlen100 : il n'est pas possible d'écrire

if Top>TForm1.Height-Height-32 then Top:= TForm1.Height-Height-32 ;

mais plutôt :

if Top>Form1.Height-Height-32 then Top: =Form1.Height-Height-32 ;



Il faut utiliser les propriété de l'instance de la classe et non celles de la classe TForm1.

Idem quelques lignes plus bas pour la largeur.

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
3 nov. 2005 à 00:09
Je me doutais bien que, venant de toi, ce ne pouvait être qu'une
malheureuse erreur de recopie faite trop vite. Ca arrive à tout
le monde.

L'essentiel est qu'aucun ordinateur n'ait été maltraité pendant ce temps là

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.croix-rouge.fr/index/partner_campagne.html
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
3 nov. 2005 à 00:28
satané copié/collé. D'autan que je n'avais retesté ce morceau de code
puisqu'il fonctionne dans le programme que j'ai posté Mea culpa : Ne
jamais donner de code que l'on n'ait pas tester!! ...même si la
modification est minime . Quand aux ordinateurs ils sont beaucoup moins
fragiles que les cartes à microcontroleurs ( elles n'aiment pas du tout
que l'on connecte 2 sorties entre elles (même par erreur en manipulant
un gripfil directement sur les pattes!!!)
0
ffomnislash Messages postés 26 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 26 août 2006
3 nov. 2005 à 07:41
merci a tous j'ai réussi à mettre tous ceci en place.



jlen100=> merci j'avais vu et corrigé l'erreur.



DeltaFX => C'est bon je ne pense pas avoir abusé, j'ai limité a 10.
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
3 nov. 2005 à 15:46
Pfui ! 10 Tcapture ? Tu connectes quoi comme hardware derriere ? des webcams (USB1.1 ou Highspeed ?) des cartes de captures video ? Elles passent en overlay ou bien tu force un preview dessus ?

Quelle plateforme cible , sans indiscretion ?
0
Rejoignez-nous