IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Variable générale non trouvée dans une fonction


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut Variable générale non trouvée dans une fonction
    salut,

    j'ai variable générale non trouvée dans une fonction
    la variable : Bitrate

    procedure StartRecording();
    var
    Encoder : String;
    begin

    if(Form1.rbOGG.Checked) then
    begin
    Encoder := 'oggenc.exe -o temp.ogg -';
    end
    else
    begin
    Encoder := 'lame.exe -b '+ Bitrate +' -h - temp.ogg';
    end;
    end;

    .....

    StartRecording();
    Voilà, je ne comprends pas comment importer la variable..

    Merci

  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Elle est où cette variable ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Elle est déclarée dans les Var Privates

    et je lui assigne une valeur dans FormCreate

  4. #4
    Membre habitué Avatar de Guile
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 130
    Points : 144
    Points
    144
    Par défaut
    Si elle est dans les var private de ta form, seule les fonctions ou procedures de ta form y ont accès. Alors soit tu la mets dans public soit, ce que je préconise c'est de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.StartRecording();
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure StartRecording();

  5. #5
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Citation Envoyé par Guile
    Si elle est dans les var private de ta form, seule les fonctions ou procedures de ta form y ont accès. Alors soit tu la mets dans public soit, ce que je préconise c'est de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure TForm1.StartRecording();
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procedure StartRecording();
    à condition que StartRecording soit une procédure de la classe TForm1

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    En fait, je crois que vous avez pas compris.

    J'ai mis ma déclaration dans le public, et ca marche pas non plus..

    La fonction ne trouve pas la variable !

    [Erreur] Unit1.pas(138): Identificateur non déclaré : 'Bitrate'

    Pourtant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      public
        { Public declarations }
        Bitrate : String;
      end;
    et je suis dans le même form..

  7. #7
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    tu as la réponse au dessus.

    Ta fonction n'est pas dans la classe.

    Donc soit tu préfixes BitRate avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.bitrate (avec bitrate dans public)
    soit tu intègres ta fonction dans ta classe (comme dit précedemment)

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    1:

    Ca marche pas :

    procedure SocketRead(Sender: TObject; Socket: TCustomWinSocket);
    private
    ZeFile : String;
    PathFTP : String;
    URLHTTP : String;
    public
    Form1.Bitrate : String;
    end;
    [Erreur] Unit1.pas(56): ',' ou ':' attendu(e) mais '.' trouvé(e)
    [Erreur] Unit1.pas(137): Identificateur non déclaré : 'Bitrate'

    2: Je ne peux pas déclarer ma variable Bitrate dans ma function() si non je ne pourrais pas l'affecter dans procedure FormCreate sa valeur..

  9. #9
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    non, pour acceder à ta var.

    il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Encoder := 'lame.exe -b '+ Form1.Bitrate +' -h - temp.ogg';
    de la meme maniere que tu as fais avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(Form1.rbOGG.Checked) then

    et pour la déclaration, revenir comme avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure SocketRead(Sender: TObject; Socket: TCustomWinSocket);
    private
    ZeFile : String;
    PathFTP : String;
    URLHTTP : String;
    public
    Bitrate : String;
    end;

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 213
    Points : 81
    Points
    81
    Par défaut
    Merci

    Faudra que j'analyse ce phénomène..

    En gros :
    Private, la form actuelle seulement, Dispo partout sauf fonctions
    Public, toutes les forms peuvent y avoir accès, dispo dans les fonctions


  11. #11
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    En clair

    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
    TMaForm = class( TForm )
      private
        A: Integer;
      protected
        B : Integer;
      public
        C : Integer
        procedure MaMethode();
    end
     
    var
       MaForme: TMaForme;
     
    procedure MaProcedure();
    begin
    ...
    end
    A est visible uniquement pour MaForm (mais pas pour ses descendants)
    B est visible uniquement par MaForm et par ses descendants
    C est visible par MaForme et pour les autres mais en spécifiant MaForme.C (utilisation dans MaProcedure par exemple)

    Je pense qu'un petit tuto sur l'objet t'apportera des infos jusque la obscure pour toi

    Bon courage !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.4] récupérer la valeur d'une variable qui se trouve dans un fonction
    Par aspkiddy dans le forum Langage
    Réponses: 2
    Dernier message: 11/02/2014, 17h06
  2. copie d'une variable non reconnue dans une fonction
    Par paragoge dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 27/10/2009, 13h30
  3. Variable non stockée dans une fonction
    Par LaVaZza dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/07/2009, 17h49
  4. [PHP-JS] Formulaire non trouvé dans une fonction
    Par philippe30 dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2005, 21h53
  5. Réponses: 4
    Dernier message: 05/10/2005, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo