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 :

[DLL] Probleme avec le Type TRichEdit !


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2004
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 146
    Points : 91
    Points
    91
    Par défaut [DLL] Probleme avec le Type TRichEdit !
    Bonjour a tous !

    J'ai un petit probleme qui me gene terriblement !
    pour alleger mon application, j'ai décidé de créer des DLL pour repartir intélligement le code.

    Au depart j'avais donc 6 unité, a ce stade il ne m'en reste plus que 4, dont 2 qui ont été transformé en DLL.

    Pour la premiere pas de probleme, car celle-ci ne contient que du code sans aucune forme, mais la deuxieme me pose réellement un probleme, elle contient une TForm, qui a sont tour contient un TRichEdit, et 2 TButton.

    Si j'enléve tout le code correspondant au TRichEdit, ma DLL s'ouvre sans probleme, mais des que je rajoute le code concernant le TRichEdit, Delphi me fait une violation d'accés !

    Pire encore, mon TRichEdit est déclarer dans la Class de la TForm, et quand je compile ma DLL, Delphi me dit que mon TRichEdit n'est pas déclarer, alors pour réparer ceci je le déclare dans la clause var avant l'implémentation, et la il accepte le TRichEdit sans pour autant executér la DLL sans probleme.

    Ce qui est bizarre c'est qu'il ne me fait pas ça avec les TButton, pourquoi ?
    Je tient a dire qu'avant d'être une DLL, tout ceci était une simple unité, et elle fonctionnait sans aucun probleme, seulement en format DLL elle ne veut pas fonctionner, et j'aimerait savoir pourquoi ?


    Pour vous aider a comprendre, voici la DLL avec les 2 déclaration du TRichEdit, 1 dans la section type, et 1 autre dans la clause var :

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    unit ScfWrn;
     
    interface
     
    uses
       Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
       Dialogs, ComCtrls, StdCtrls, DateUtils, StrUtils;
     
    type
      TWarSCF = class(TForm)
        ReportWRN: TButton;
        ValidWRN: TButton;
        ViewWRN: TRichEdit;
        procedure ValidWRNClick(Sender: TObject);
        procedure ReportWRNClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    procedure ShowWrn(DirSet: ShortString; NivWrn: Byte); stdcall;
     
    var
      WarSCF: TWarSCF;
      ViewWRN: TRichEdit;
     
     
    implementation
     
    {$R *.dfm}
     
    procedure ShowWrn(DirSet: ShortString; NivWrn: Byte);
    var FindWRN: TextFile; Mss1, DtAna, DtTmp, DtFile, DtNext, CfTmp: String[50];
        Mss3, Mss2, Dir: String; Level: Char; Idx, I, IdxWRN, LgnWRN: Integer; Cf: array[1..2000] of String;
        Y, M, D, H, MN, SC, MS: Word;
    begin
        LgnWRN:=0; IdxWRN:=0; Idx:=0;
        WarSCF:=TWarSCF.create(application);
        WarSCF.Show;
     
        AssignFile(FindWRN,DirSet+'WarBck.rpt');
        {$I-}
        Reset(FindWRN);
        {$I+}
        if IoResult = 0 then begin
            try
                ViewWRN.Lines.Clear;
                repeat
                    Inc(LgnWRN);
                    Readln(FindWRN);
                    Readln(FindWRN,Dir);
                    Readln(FindWRN,Mss2);
                    Readln(FindWRN);
                    Readln(FindWRN,DtFile);
                    Readln(FindWRN,DtAna);
                    Readln(FindWRN,DtNext);
                    Readln(FindWRN,CfTmp);
                    Readln(FindWRN,Level);
                    Readln(FindWRN,Mss1);
                    Readln(FindWRN,Mss3);
                    Readln(FindWRN);
                    if StrToInt(Level) = NivWrn then begin
                        DecodeDate(Now,Y,M,D);
                        DecodeTime(Now,H,MN,SC,MS);
                        DtTmp:=FormatDateTime('ddd dd/mm/yy hh:nn',EncodeDateTime(Y,M,D,H,MN,SC,MS));
                        if DtAna = DtTmp then begin
                            if Idx = 0 then WarSCF.Show;
                            if not AnsiMatchText(CfTmp,Cf) then begin
                                Inc(Idx);
                                Cf[Idx]:=CfTmp;
                            end;
                            for I:=1 to Idx do
                                if CfTmp = Cf[I] then IdxWRN:=I;
                            ViewWRN.SelText:=Mss1;
                            ViewWRN.SelAttributes.Color:=clYellow;
                            ViewWRN.SelAttributes.Size:=9;
                            Dir:=Dir+Mss2+' ('+IntToStr(IdxWRN)+')';
                            ViewWRN.SelText:=Dir;
                            ViewWRN.SelAttributes.Color:=clWhite;
                            ViewWRN.SelAttributes.Size:=8;
                            Dir:=Mss3;
                            if Length(Mss3) <= 21 then ViewWRN.SelText:=Dir
                            else ViewWRN.Lines.Add(Dir);
                            ViewWRN.Lines.Add('');
                            ViewWRN.Lines.Add('');
                            ViewWRN.Lines.Add('Fichier du '+#9+':'+#9+DtFile);
                            ViewWRN.Lines.Add('Analyse du '+#9+':'+#9+DtAna+#9+'-->'+#9+DtNext);
                            ViewWRN.Lines.Add('---------------------------------------------------------------------------------------');
                        end;
                    end;
                until (Eof(FindWRN)) or (LgnWRN >= 2000);
                ViewWRN.Lines.Add('');
                ViewWRN.Lines.Add('-> ** Fin de rapport **');
            finally
                CloseFile(FindWRN);
            end;
        end;
    end;
     
    procedure TWarSCF.ValidWRNClick(Sender: TObject);
    begin
        WarSCF.Close;
        WarSCF.Free;
    end;
     
    procedure TWarSCF.ReportWRNClick(Sender: TObject);
    begin
        WarSCF.Close;
        WarSCF.Free;
    end;
     
    exports ShowWrn;      
     
    end.
    Merci a tous pour votre aide !

  2. #2
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bonjour,

    pour essayer d'enlever un peu de flou, il est normal que le viewWrn déclaré dans ta classe TVarSCF ne soit pas visible directement dans ta procédure ShowWrn, puisque cette dernière ne fait pas partie de ta classe TVarSCF. Pour pouvoir l'utiliser, il faut d'abord que tu instancie un objet de classe TWarSCF et que tu adresse ta propriété ainsi : MonObjet.viewWrn.

    @++
    Dany

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2004
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 146
    Points : 91
    Points
    91
    Par défaut
    Merci a toi,

    Mon probleme est resolu, il est vrai que je n'avais pas pensez du tout a ça !

    A priori j'ai encore des progrés a faire

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

Discussions similaires

  1. probleme avec le type LONG ROW
    Par amigauss dans le forum SQL
    Réponses: 10
    Dernier message: 21/09/2006, 10h29
  2. Petit probleme avec <input type="text" .
    Par cyberdevelopment dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 18/08/2006, 20h17
  3. [Delphi] [DLL] Problème avec un paramètre PChar
    Par Mickey.jet dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2006, 16h43
  4. [VB6.0]Probleme avec le type Form
    Par Tankian dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 17/11/2005, 13h26
  5. Réponses: 2
    Dernier message: 30/08/2004, 14h48

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