Deplacer un composant [Résolu]

ffomnislash 26 Messages postés dimanche 14 mars 2004Date d'inscription 26 août 2006 Dernière intervention - 1 nov. 2005 à 11:40 - Dernière réponse : DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention
- 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.
Afficher la suite 

14 réponses

Répondre au sujet
DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention - 1 nov. 2005 à 23:12
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de DeltaFX
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 2 nov. 2005 à 23:44
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jlen100
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 1 nov. 2005 à 12:01
0
Utile
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
Commenter la réponse de jlen100
ffomnislash 26 Messages postés dimanche 14 mars 2004Date d'inscription 26 août 2006 Dernière intervention - 1 nov. 2005 à 12:45
0
Utile
merci de ton aide, je testerait ca dans la journée ;p
Commenter la réponse de ffomnislash
DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention - 1 nov. 2005 à 14:15
0
Utile
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 !
Commenter la réponse de DeltaFX
ffomnislash 26 Messages postés dimanche 14 mars 2004Date d'inscription 26 août 2006 Dernière intervention - 1 nov. 2005 à 18:12
0
Utile
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
Commenter la réponse de ffomnislash
ffomnislash 26 Messages postés dimanche 14 mars 2004Date d'inscription 26 août 2006 Dernière intervention - 2 nov. 2005 à 10:22
0
Utile
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.
Commenter la réponse de ffomnislash
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 2 nov. 2005 à 11:37
0
Utile
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
Commenter la réponse de florenth
DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention - 2 nov. 2005 à 12:11
0
Utile
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. !
Commenter la réponse de DeltaFX
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 2 nov. 2005 à 23:29
0
Utile
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
Commenter la réponse de cs_Delphiprog
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 3 nov. 2005 à 00:09
0
Utile
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
Commenter la réponse de cs_Delphiprog
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 3 nov. 2005 à 00:28
0
Utile
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!!!)
Commenter la réponse de jlen100
ffomnislash 26 Messages postés dimanche 14 mars 2004Date d'inscription 26 août 2006 Dernière intervention - 3 nov. 2005 à 07:41
0
Utile
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.
Commenter la réponse de ffomnislash
DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention - 3 nov. 2005 à 15:46
0
Utile
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 ?
Commenter la réponse de DeltaFX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.