Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Passer une Fonction en Paramètre [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (moldov)

mardi 10 janvier 2006 à 15:02:16 | Passer une Fonction en Paramètre

moldov

Bonjour,

je cherche un moyen de passer une fonction en parametre pour pouvoir l'executer dans une autre fonction afin d'avoir un code plus propre.

Exemple :

procedure X;
var
    status : integer
begin
status := 1;
while status <> 0 do                             status:=DAQmxReadAnalogF64(TaskHandleAI[nDevice,nCanal],-1,10.0,DAQmx_Val_GroupByChannel,Buffer,NbMesures,@status1,nil);

status := 1;
while status <> 0 do        status:=DAQmxStopTask(TaskHandleAI[nDevice,nCanal]);
end;


je voudrais a la place

procedure X;
begin
Y(DAQmxStopTask(TaskHandleAI[nDevice,nCanal]));
Y(DAQmxReadAnalogF64(TaskHandleAI[nDevice,nCanal],-1,10.0,DAQmx_Val_GroupByChannel,Buffer,NbMesures,@status1,nil));
end;

procedure Y(fct : ....)
var
    status : integer;
begin
    status := 1;
    while status <> 0 do
       status := fct;
end;

Merci Beaucoup pour votre aide

Bonne Prog


mardi 10 janvier 2006 à 16:03:51 | Re : Passer une Fonction en Paramètre

Loulibier

Membre Club
Bonjour moldov,

Et pourquoi ne fais tu pas une function recursive ?

exemple :

procedure X;
begin
  DAQmxReadAnalogF64(TaskHandleAI[nDevice,nCanal],-1,10.0,DAQmx_Val_GroupByChannel,Buffer,NbMesures,@status1,nil);
  DAQmxStopTask(TaskHandleAI[nDevice,nCanal]);
end;

function DAQmxReadAnalogF64(TaskHandleAI[nDevice,nCanal], -1, 10.0, DAQmx_Val_GroupByChannel, Buffer, NbMesures, @status1, nil) : integer;
begin
 // Traitement puis on traite le resultat si different de 0 alors on appel la même fonction.

  if Result <> 0 then
     Result := DAQmxReadAnalogF64(TaskHandleAI[nDevice,nCanal],-1,10.0,DAQmx_Val_GroupByChannel,Buffer,NbMesures,@status1,nil);
end;

function DAQmxStopTask(TaskHandleAI[nDevice,nCanal]): integer;
begin
 // Traitement puis on traite le resultat si different de 0 alors on appel la même fonction.

  if Result <> 0 then
     Result := DAQmxStopTask(TaskHandleAI[nDevice,nCanal]);
end;

Bonne Prog,

Olivier

PS : Lorsqu'une réponse vous convient, n'oubliez pas de la valider.

mardi 10 janvier 2006 à 20:41:34 | Re : Passer une Fonction en Paramètre

florenth

Membre Club
Réponse acceptée !

type
{ Définition du type de fonction. }

  TMyFonction = fonction (Parametres): Integer;

procedure Y(AFonction: TMyFonction);

var
  Status : Integer;
begin
  Status := 1;
  while Status <> 0 do
    Status := AFonction(Parametres); // Appel de la fonction passée en parametre
end;

{ Procédure principale. }
procedure X;
begin
 { Appels à la procedure Y en lui passant un parametre fonction. }
 Y(AFunc);
 Y(AOtherFunc);
end;


Cet exemple te montre comment faire.
Evidemment, il faut que les fonctions AFunc et AOtherFunc soient déclarées avant la procédure X (ou en forward) et qu'elle soient bien du type TMyFonction.

++
Flo

Si tu ne te plantes pas ......
tu ne poussera jamais

mardi 10 janvier 2006 à 20:51:38 | Re : Passer une Fonction en Paramètre

jlen100

Membre Club
-->florenth ton doigt auarit-il déraper?
TMyFonction = fonction (Parametres): Integer;--TMyFonction = fUnction (Parametres): Integer;
@+
jlen




mardi 10 janvier 2006 à 21:02:46 | Re : Passer une Fonction en Paramètre

florenth

Membre Club
Oups .... vive le français !!!
Evidemment, il faut lire fUnction et non pas fOnction.
Merci de cette remarque jlen

Dérapé, mon doigt ... je ne crois pas. A moins que chez toi le ''u'' soit à côté du ''o'', mais ya le ''i''. Bref ...

Si tu ne te plantes pas ......
tu ne pousseras jamais

mardi 10 janvier 2006 à 21:13:59 | Re : Passer une Fonction en Paramètre

jlen100

Membre Club
ah les faux amis!!
non mon clavier est tout à fait standard mais mes doigts apparament beaucoup moins:
aurait est devenu auarit!!!! ou je suis devenu dyslexique.


@+
jlen


mercredi 11 janvier 2006 à 13:35:40 | Re : Passer une Fonction en Paramètre

DeltaFX

Et :

Type  TmyProc = procedure(Sender: TObject) of object;

si tu souhaites passer des fonction/procédure de la Form genre

procedure TForm.MachinOnDblClick(Sender: TObject);


gnh !

mercredi 11 janvier 2006 à 17:49:30 | Re : Passer une Fonction en Paramètre

florenth

Membre Club
@ DeltaFX: je suis d'accord pour le "of object" mais par contre, le Sender n'est pas un parametre obligatoire. Ca sert, d'accord, mais pas toujours donc on peut l'ommetre (et rajouter d'autres parametres evidemment) si on le souhaite.

@jlen100: je penche plus pour la première raison quoi qu'une dyslexie n'est pas forcément grave ...
Par contre, dans ton premier post, ce n'est pas déraper mais derapé, ... aïe aïe aïe !!!

++

Si tu ne te plantes pas ......
tu ne pousseras jamais

mercredi 11 janvier 2006 à 20:55:36 | Re : Passer une Fonction en Paramètre

DeltaFX

Beuh, en fait j'ai juste fait un copy-paste depuis un de mes prog. J'avais le "of object " en bleu...

gnh !

mercredi 11 janvier 2006 à 20:56:19 | Re : Passer une Fonction en Paramètre

Delphiprog

Administrateur CodeS-SourceS
@DeltaFx : le type de procédure que tu déclares existe déjà nativement avec Delphi et se nomme TNotifyEvent , lol.

@Moldov : en gros, tu voudrais utiliser ce que l'on appelle des fonction callback (de rappel in French). Ce type de fonction est très fréquemment utilisé dans la programmation Windows et permet une grande souplesse en passant, en argument, une fonction plutôt qu'une autre. L'essentiel étant de déclarer le type de la fonction passée avant de l'utiliser. C'est un principe intangible en Pascal (à quelques rares exceptions près) et tu le sais déjà.

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.


1 2

Cette discussion est classé dans : fonction, status, taskhandleai, ndevice, ncanal


Répondre à ce message

Sujets en rapport avec ce message

fonction de "consersion" [ par jakouz ] bonjour je voudrais savoir s'il existe une fonction intégrée delphi qui me donne le chemin absolu de mon répertoire de base http (web) ? Merci d'avanc Appeler un fonction a partir d'une autre unit [ par fabiin ] Salutalors voila,g une fonction ki ce trouve dans une autre unit, mais cette unit n'est pas "lié" a une form, elle est juste comme ca pour mettre des limitation de sendtext ? [ par Xavier ] Bonjour,Comme la fonction sendtext prend en parametre un string et sachant qu'un string peut faire 2 Mo, pensez-vous qu'il est raisonnable d'utiliser prb avec dll et tableau dynamique [ par bd ] actuellement je recois en parametre d'une fonction un tableau de longueur variable. ce tableau est rempli dans la fonction de la dll.au retour dans la Retourner une chaine... [ par ELECTRORESiSTiK ] Salut,J'ai une chaine "1234567890" je cherche une fonction qui me donnerai "0987654321". Comment puis-je faire ça ? Il existe une fonction ?Merci d'av Fonction ??? [ par ELECTRORESiSTiK ] Salut, je cherche une fonction qui me permettrai de mettre un texte en forme sur une largeur de 70 caractère sans couper un mot et mettre des espaces Une fonction existe pour ça ? [ par ELECTRORESiSTiK ] Salut, je cherche une fonction qui me permettrait de mettre un texte en forme sur une largeur de 70 caractères sans couper un mot et mettre des espace déclaration d'une fonction [ par vib ] Je désire déclarer la fonction:function trouver_composant(t:string):Tcompopour quelle soit visible dans les autres unités.Je la déclare donc dans la p Fonction pour séparer des champs dans une chaine [ par belkin ] Bonjour,Existe-t-il une fonction qui permet de séparer des champs dans une chaine ?Exemple : MaVariable := '123_456.dat';Je veux séparer le 123 et 456 mot-clé inherited et les fonction [ par JesseJames ] salut, j'ai un problème qui me torture la vie, help !Ayant 2 classes, A et B, A était la super-classe et B une classe fille.la méthode (fonction) de A


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.