begin process at 2008 08 29 22:48:29
1 233 930 membres
450 nouveaux aujourd'hui
14 294 membres club

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 !

IP-MASTER, OU VOTRE IP FACILE !


Information sur la source

Catégorie :Réseau & Internet Classé sous : IP, internet, registre, local, bdr Niveau : Débutant Date de création : 24/07/2008 Date de mise à jour : 25/07/2008 12:45:44 Vu / téléchargé: 2 427 / 231

Note :
Aucune note

Commentaire sur cette source (42)
Ajouter un commentaire et/ou une note

Description

Bonjour,
cette application permet de vérifier à tout moment son adresse IP Internet et Locale, mais peut également servir à vérifier sa connexion internet.
Le code peut être bordelique par endroits, mais j'ai mis pas mal de commentaires pour m'y retrouver.
J'ai un seul problème, à la fermeture de la fiche, "Violation d'accès à l'adresse 00000000, lecture de l'adresse 00000000", signe qu'un objet est appelé alors qu'il est libéré, je vais chercher pourquoi et je mettrai la version corrigée dès que j'aurai trouvé, si vous avez des idées pour améliorer ...

Grâce à ce source vous allez apprendre à :
- Utiliser le WebBrowser
- Récuperer IP internet
- Recuperer IP locale
- Utiliser le registre
- Utiliser les fichiers ini
- Utiliser le CoolTrayIcon (composant freeware, compris dans le zip)
- Et d'autres choses encore ...

Conclusion

Notes :
Pour utiliser le webbrowser, vous allez peut-être avoir à changer, dans la clause Uses :
SHDocVw_TLB
en
SHDocVw

Tous commentaires, critiques, remarques, etc ... sont les bienvenus.

Si vous avez des problèmes avec la source, dites le je le corrigerai de suite !
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

24 juillet 2008 20:08:46 :
// Nettoyage du zip + SimpleTimer.pas/dcu
24 juillet 2008 20:28:14 :
// Ajout du composant RunOne ...
24 juillet 2008 20:54:41 :
// Ajout de WindowsXP.res
25 juillet 2008 12:35:01 :
// Version 2 mise en ligne (utilisation des fichiers ini)
25 juillet 2008 12:45:44 :
// Correction du beug de freeze + update de la version dans A Propos
  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 13:02:54

    Logiciel codé sous Delphi 6 Personal Edition.

  • signaler à un administrateur
    Commentaire de Francky23012301 le 24/07/2008 15:48:55

    Salut Bacterius,

    Alors quelques remarques :

    *Ton indentation admet des petits problemes : En effet suivant les procédures ou fonctions, elle diffère.
    Normalement on écrit :
    Begin
      If .... Then
    End;
    L'espace correspond à 2 Echaps et pas 2 tabulations : Hors suivant les procédures tu fais soit l'un soit l'autre.

    *Je trouve l'utilisation du TWebBrowser inutile ici : Indy, ou à la rigueur TSocket auraient été mieux. Autre remarque : pour l'adresse IP Local tu utilises les WinSocket : pourquoi ne pas faire la meme chose pour l'IP Internet : ca aurait donné un sacré intéret à ta source.

    *Le composant CoolTrayIcon : tu aurais du (Pour un composant) l'utiliser dynamiquement. Là tu risques d'avoir peu de testeurs (C'est la raison pour laquelle je n'ai pas testé mais juste regarder le code).

    *Ce code est un mélange de sources déja existants : ca c'est pas top, car ca n'apporte pas grand chose (Enfin c'est juste mon opinion).

    Sinon le code est bien commenté, composants renommés, c'est propre et facilement compréhensif.

    Je note pas

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 16:54:59

    Bonjour,
    oui Francky23012301 je vais répondre à tes remarques :

    - identation : oui c'est vrai que j'ai été un peu sale sur l'identation, c'était soit 2 tabs, soit un saut de ligne, en fait il n'y a pas de différence entre procédure et fonction (ou pure coincidence).

    - TWebBrowser : j'ai préféré utiliser webbrowser parce que je me sentais plus à l'aise avec, en effet avec les composants Indy je suis vite perdu avec tous ces composants, et puis tout le monde n'a pas Indy. Quant aux sockets, j'avais essayé à la place du webbrowser mais je n'ai jamais réussi à récuperer quoi que ce soit, et de toute façon c'était si instable (exceptions, plantages ...) que j'ai préféré revenir au TWebBrowser. Bien sur il est adaptable en Indy ou en socket.

    - IP locale avec WinSocket : il est possible de récuperer l'adresse internet avec WinSocket, mais pas quand on est derrière un routeur. D'ailleurs je ne me suis pas trop posé sur l'ip locale, au début c'était juste pour l'ip internet et puis comme j'avais la fonction sous la main, je me suis dit pourquoi pas !

    - Composant CoolTrayIcon : je ne sais pas comment créer des composants dynamiquement, je vais essayer d'apprendre.

    - Mélange de sources déjà existants, c'est vrai j'ai pris la procédure de Caribensila, mais je ne vois pas où j'ai pris d'autres sources déjà existants (en tout cas je crois n'avoir emprunté que celle de Caribensila, j'ai codé le reste tout seul lol)

    Je sais qu'il y a pas mal de trucs à revoir dans ce petit utilitaire, mais je te remercie d'avoir quand même lu le code, certaines personnes se contentent de lire la description, et de noter en conséquence sans laisser de commentaire (je ne nommerai personne ...)
    Et je te remercie également pour tes points positifs, j'ai essayé de commenter au maximum pour qu'il soit lisible même de ma soeur (mais c'est pas encore gagné ...).

    Merci beaucoup :)

    Cordialement, Bacterius !

    PS : Ce commentaire est beaucoup trop long ...

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 17:01:17

    Ah oui j'ai oublié de remercier Caribensila pour la fonction d'ip internet (qui est quand même le centre du logiciel) :
    http://www.delphifr.com/codes/IP-INTERNET_27202.aspx

    Je ne l'ai remercié que dans le code, je le fais ouvertement ici !

    Merci Caribensila ! ^^

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de cirec le 24/07/2008 19:26:14 administrateur CS

    @ Francky:
    "Le composant CoolTrayIcon : tu aurais du (Pour un composant) l'utiliser dynamiquement. Là tu risques d'avoir peu de testeurs (C'est la raison pour laquelle je n'ai pas testé mais juste regarder le code)."

    La compilation en ligne de commande .... tu connais ? ^^

    j'ai pas encore testé mais je me rappel que le code de Caribensila ne fonctionnait pas chez moi :(

    Je retenterai donc pour être certain ... des fois que ... ^^

    Sinon j'avais utilisé une Dll de BruNews ... qui elle fonctionnait chez moi.

    Voilà le reste du commentaire viendra après le teste.

  • signaler à un administrateur
    Commentaire de cirec le 24/07/2008 19:33:00 administrateur CS

    @Bacterius:

    avant de pouvoir tester il faut ajouter une unité:
    CoolTrayIcon.pas(61) Fatal: F1026 File not found: 'SimpleTimer.dcu'

    et comme tu vas refaire le Zip profites en pour virer tous les fichier inutiles ( *.dcu, *.cfg, *.dof)

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 20:04:30

    Bonjour,
    ah ? je ne savais pas qu'il fallait SimpleTimer, je vais le récuperer sur ma machine et je nettoyerai le zip. Au fait je voudrais garder le IpExe.res, car il contient l'icone de l'application (ca serait cool de la garder sinon ça aura une moins belle gueule ...)
    Bon je corrige le zip.

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 20:06:40

    Ah au fait ya un truc qui va pas dans ton dernier commentaire Cirec :

    "File not found: 'SimpleTimer.dcu'"

    "et comme tu vas refaire le Zip profites en pour virer tous les fichier inutiles ( *.dcu ..."

    ==> Bon je sors

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 20:09:36

    Voila c'est fait le nettoyage du zip :)

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de cirec le 24/07/2008 20:20:43 administrateur CS

    ^^

    c'est le message du compilateur que j'ai copier .. et voici le suivant:
    Main.pas(8) Fatal: F1026 File not found: 'RunOne.dcu'

    Donc il faut encore ajouter l'unité 'RunOnce.pas'

    et il y a encore des fichiers inutiles dans le répertoire CoolTrayIcon ;)

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 20:25:51

    Damned le composant RunOne, je l'avais oublié
    Et puis pour le dossier cooltrayicon, je vire les DCU et ca devrait être fini lol

    Je refais le zip ...

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 20:29:23

    Voila c'est fait.
    Je sais pas pourquoi je mets toujours // devant les explications de mise à jour, c'est une habitude que j'ai eue depuis mon inscription sur CS. Et je sais pas pourquoi je dis ça ...

    Cordialement, Bacterius !

    PS : Je pense que ca sera bon maintenant Cirec ^^'

  • signaler à un administrateur
    Commentaire de cirec le 24/07/2008 20:49:30 administrateur CS

    ben non désolé ... il manque encore la ressource :
    "WindowsXP.RES"

    Bon j'en ai une sous le coude mais il serait préférable de l'ajouter au Zip

    et sinon ça merde grave (si quelqu'un pouvait tester pour voir)

    enfin chez moi ça ne fonctionne pas du tout .. quand je lance l'application elle reste bloquée sur la MessageBox :

    ---------------------------
    Information
    ---------------------------
    L'adresse registre "HKCU:\Software\Ip Master\" n'existe pas. Ce logiciel la créera pour pouvoir effectuer des traitements sur les options.
    ---------------------------
    OK  
    ---------------------------

    on ne peut pas fermer cette boite et dans la barre des taches il y a une icône (mais celle qui devrait être) avec le popup mais aucun des MenuItems ne fonctionnent !!!!!

    j'ai du tuer le processus pour pouvoir quitter.

    Il y a un sérieux problème dans le code.
    Pour l'instant je n'ai pas le temps de regarder le code.

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 20:52:20

    Bonsoir,
    un problème dans le code :O pourtant chez moi ça marche. Le message c'est normal, mais c'est pas normal de pas pouvoir la fermer. Est ce que tu as l'autorisation d'écrire dans le registre ? Ca expliquerait pas mal de trucs. Quant à la ressource WindowsXP.RES, en effet je l'oublie souvent, mais elle peut être troquée contre XPMan pour Delphi 7 et +
    Mais je la mets quand même !
    Pourrais-tu me dire sur quel OS tu tournes, pour que je voie quel partie du code a un problème de compatibilité ...

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 20:58:01

    Bonsoir,
    j'ai noté que je n'avais pas testé une partie du code : en fait je n'ai jamais testé la boîte de dialogue "la clé registre ..." au début du logiciel, si jamais les options n'étaient pas trouvées dans le registre, car je les avais ajoutées à la main. Je les aie supprimées, mais ça marche quand même chez moi. Je peux cliquer sur OK, et tout ce passe bien ...
    Tu m'avais dit que le code de Caribensila sur le WebBrowser ne marchait pas, c'est peut-être la cause, elle est appelée par le timer, 4 secondes après le lancement du programme. Ca a beugé à ce moment la ?

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 24/07/2008 21:03:48

    Ah tu peux aussi essayer de virer RunOne, il permet juste de ne lancer qu'une seule fois l'application, mais qui sait c'est ptet lui qui te gêle le logiciel.

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de cirec le 25/07/2008 01:37:04 administrateur CS

    non non le gèle vient d'un "petit" bordel dans le OnCreate de la fiche.

    Très rapidement j'ai mis en commentaire ces quelques lignes :
            //Show;
            //BringToFront; // On affiche (sinon il ne s'affiche pas au démarrage)
           // SetFocus;    // On le met devant et on lui met la focalisation

    et l'application démarre et fonctionne ...
    mais le problème de l'erreur à la fermeture reste entier.

    L'écriture de données dans la BDR n'est pas une bonne idée. Elle est déjà assez chargé par Windows et d'autres application, pas la peine d'en rajouter. Puis peut de personne apprécie que l'on y stock des informations surtout que les données des options resteront polluer la BDR même si l'on ne désire plus se servir de ton prog (il faut les virer à la main) alors qu'un fichier Ini, placé dans le répertoire de l'application, suffisait amplement.

    C'est tout ce que j'ai vu/regardé pour l'instant.
    puis s'il te plait refait l'indentation de ton code.
    ça ne donne vraiment pas envie de s'y plonger.

    Sinon je le répète l'application donne bien l'IP, de ce coté   tout fonctionne.  ^^

  • signaler à un administrateur
    Commentaire de yvessimon le 25/07/2008 09:16:03

    Bonjour,

    il demande "textTrayIcon"

    Salutations

  • signaler à un administrateur
    Commentaire de Bacterius le 25/07/2008 11:50:02

    Bonjour,

    @Cirec je vais refaire le système en écrivant plutôt dans un fichier ini, que dans le registre. De plus l'accès au registre est parfois bloqué pour certains utilisateurs, genre Invité.
    Et je vais égaliser l'identation.
    Et ca te donne l'ip cool :)

    @yvessimon le compilateur te demande texttrayicon.dcu ?
    Si je le trouve sur ma machine je le mettrai dans le zip

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 25/07/2008 11:51:37

    Ah ouais mais pour le lancement au démarrage, je laisse dans le registre ? (l'utilisateur peut toujours enlever la clef dans le menu options) ... et je ne vois pas d'autre manière de faire que l'application se lance au démarrage. Enlever cette option ?

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 25/07/2008 12:36:49

    Bon j'ai mis la version 2 :
    - fichiers ini
    - textTrayIcon pour yvessimon
    - Indentation du code plus uniforme et moins tabulaire (incrémentation de 1 à 2 espaces).

    Une remarque : j'ai oublié d'updater la version dans la fiche A propos. Ca sera pour la prochaine MAJ ^^

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 25/07/2008 12:42:10

    @Cirec j'ai eu ton problème de freeze au démarrage de l'appli. Je crois que j'ai pu isoler la ligne qui faisait beuger :

    TrayIcon.Behavior := bhWin2000;

    Je l'ai enlevée tout se passe bien chez moi maintenant.
    Je corrige tout de suite pour pas que vous ayez à le faire.

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de yvessimon le 25/07/2008 14:59:02

    Bonjour,

    il demande " RegisterTrayIcons " à la compil !

    Salutations

  • signaler à un administrateur
    Commentaire de Francky23012301 le 25/07/2008 15:11:21

    Pour la base de registre, rajoute une procédure via un bouton pour supprimer les clés. Ca évitera que les gens fassent des betises en le faisant manuellement.

    Pour l'IP internet : utiliser les WinSockets. Tu fais un mini client HTTP qui récupère le fichier HTML de http://www.mon-ip.com/. Puis traitement classique pour en sortir l'IP

  • signaler à un administrateur
    Commentaire de Bacterius le 25/07/2008 15:21:08

    Bonjour,

    @yvesssimon : ya un truc etrange, Cirec n'a pas eu les messages que tu as. Je pense qu'il avait deja une version anterieure de CoolTrayIcon.
    Je vais récuperer tout ça et le mettre dans le zip.

    @Francky : J'ai déjà mis la version 2 qui ne prend plus en charge le registre pour les options (uniquement pour le démarrage de Windows, mais on peut la supprimer via le menu options). Mais je ne comprends pas ce que tu peux dire "pour supprimer les clés" ... tu veux dire un kit de survie pour ceux qui ont téléchargé la version 1 et qui ont le BDR pourri par mes clés options ?
    Pour ce qui concerne l'ip internet : je ne sais pas trop utiliser les WinSockets, mais je vais me renseigner. Je posterai tout ça dans quelques temps.

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Caribensila le 25/07/2008 15:27:03

    Salut,

    @Bacterius
    Pour le RunOnce, tu peux utiliser ces qq lignes de code :

    var HandleMutex : THandle;

    function IsRunning : Boolean;
      begin
      result := true;
      SetLastError(NO_ERROR);
      if OpenMutex(MUTEX_ALL_ACCESS,false,pChar('MonMtx'))<>0 then exit;
      HandleMutex  := CreateMutex(Nil,true,pChar('MonMtx'));
      if HandleMutex = 0 then ShowMessage('Erreur de Mutex')
                                  else result := false;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
      begin
      if IsRunning then Halt;
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
      begin
      if HandleMutex <> 0 then ReleaseMutex(HandleMutex);
    end;

  • signaler à un administrateur
    Commentaire de Francky23012301 le 25/07/2008 15:54:23

    Voila le début d'un composant pour récupérer l'IP Internet en utilisant les WinSockets :

    unit IPAddress;


    interface

    uses
      Windows, Winsock, SysUtils, Classes, ScktComp,ComCtrls;

    type
      TIPAddress = class(TComponent)
      private
        Sock: TSocket;
        function ResolveIP(Const AURL: string): string;
      protected
        FPort:     cardinal;
        FURL: string;
      public
        function Connect: boolean;
        function Disconnect: boolean;
        function Connected: boolean;
        function Error: string;
        function ReceivedString(Const AString: string): boolean;
        function SendString(AString: string): boolean;
        Constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        { Public declarations }
      published
        property PORT: cardinal Read FPort Write Fport;
        property URL: string Read FURL Write FURL;
        { Published declarations }
      end;

    var
      State: integer = 1;
      WSAData: TWSAData;
      SockAddrIn: TSockAddrIn;
      Answer:String;

    const
      CRLF = #13#10;

    procedure Register;

    implementation

    procedure Register;
    begin
      RegisterComponents('TEST, [TIPAddress]);
    end;

    constructor TIPAddress.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      WSAStartUp(257, WSAData);
      state := 0;
    end;

    destructor TIPAddress.Destroy;
    begin
      WinSock.closesocket(Sock);
      WSACleanup();
      state := 0;
      inherited Destroy;
    end;

    function TIPAddress.ResolveIP(Const AURL: string): string;
    type
      TAPInAddr = array [0..100] of PInAddr;
      PAPInAddr = ^TAPInAddr;
    var
      Index:   integer;
      WSAData: TWSAData;
      HostEnt: PHostEnt;
      PInAddr: PAPInAddr;
    begin
      Result := '';
      WSAStartUp($101, WSAData);
      try
        HostEnt := GetHostByName(PChar(AURL));
        if HostEnt <> nil then
        begin
          PInAddr := PAPInAddr(HostEnt^.h_addr_list);
          Index   := 0;
          while PInAddr^[Index] <> nil do
          begin
            Result := (inet_ntoa(PInAddr^[Index]^));
            Inc(Index);
          end;
        end;
      except
      end;
      WSACleanUp();
    end;

    function TIPAddress.Connect: boolean;
    begin
      State  := 0;
      Result := False;
      sock   := Winsock.Socket(AF_INET, SOCK_STREAM, 0);
      if sock <> winsock.INVALID_SOCKET then
      begin
        with SockAddrIn do
        begin
          sin_family := AF_INET;
          sin_port   := htons(Fport);
          sin_addr.S_addr := inet_addr(PChar(ResolveIP(FURL)));
        end;
        if Winsock.Connect(sock, SockAddrIn, SizeOf(SockAddrIn)) <> Socket_Error then
        begin
          State  := 1;
          Result := True;
        end;
      end;
    end;

    function TIPAddress.Disconnect: boolean;
    begin
      Result := False;
      if winSock.closesocket(Sock) <> Winsock.SOCKET_ERROR then
      begin
        State  := 0;
        Result := True;
      end;
    end;

    function TIPAddress.Connected: boolean;
    begin
      if State = 1 then
        Result := True
      else
        Result := False;
    end;

    function TIPAddress.ReceivedString(Const AString: string): boolean;
    var
      StringReceived: array [0..2048] of char;
    begin
      ZeroMemory(@StringReceived[0], SizeOf(StringReceived));
      winsock.Recv(Sock, StringReceived, SizeOf(StringReceived), 0);
      if (Copy(StringReceived, 1, 3) <> Astring) then
        Result := False
      else
        Begin
        Result := True;
        Answer:=StringReceived;
        Delete(Answer,Pos(AString,Answer),length(AString));
        End;
    end;

    function TIPAddress.SendString(AString: string): boolean;
    begin
      if winsock.Send(Sock, AString[1], Length(AString), 0) = winsock.SOCKET_ERROR then
        Result := False
      else
        Result := True;
    end;

    function TIPAddress.Error: string;
    begin
      case winsock.WSAGetLastError of
        10004: Result := 'Interrupted function call.';
        10013: Result := 'Refused permission.';
        10014: Result := 'Bad address.';
        10022: Result := 'Invalid Arguments.';
        10024: Result := 'Too many open files.';
        10035: Result := 'Resource temporarily unavailable.';
        10036: Result := 'peration in progress.';
        10037: Result := 'Operation already in progress.';
        10038: Result := 'Socket operation or no-socket.';
        10039: Result := 'Destination address required.';
        10040: Result := 'Too long message .';
        10041: Result := 'Protocol wrong type for socket.';
        10042: Result := 'Bad protocol option.';
        10043: Result := 'Protocol not supported.';
        10044: Result := 'Socket type not supported.';
        10045: Result := 'Operation not supported.';
        10046: Result := 'Protocol family not supported.';
        10047: Result := 'Address family not supported by protocol family.';
        10048: Result := 'Address already in use.';
        10049: Result := 'Cannot assign requested address.';
        10050: Result := 'Network is down.';
        10051: Result := 'Network is unreachable.';
        10052: Result := 'Network dropped connection on reset.';
        10053: Result := 'Software caused connection abort.';
        10054: Result := 'Connection reset by peer.';
        10055: Result := 'No buffer space available.';
        10056: Result := 'Socket is already connected.';
        10057: Result := 'Socket is not connected.';
        10058: Result := 'Cannot send after socket shutdown.';
        10060: Result := 'Connection timed out.';
        10061: Result := 'Connection refused.';
        10064: Result := 'Host is down.';
        10065: Result := 'No route to host.';
        10067: Result := 'Too many processes.';
        10091: Result := 'Network subsystem is unavailable.';
        10092: Result := 'WINSOCK.DLL version out of range.';
        10093: Result := 'Successful WSAStartup not yet performed.';
        10094: Result := 'Graceful shutdown in progress.';
        11001: Result := 'Host not found.';
        11002: Result := 'Non-authoritative host not found.';
        11003: Result := 'This is a non-recoverable error.';
        11004: Result := 'Valid name, no data record of requested type.';
      end;
    end;

    End.


    Il te reste plus qu'a utiliser les procédures SendString et ReceivedString pour implémenter le protocole HTTP :

    Ca devrait faire un truc du style

    function TIPAddress.GETIP: boolean;
    var
      Index: cardinal;
    begin
      Result := False;
      if State = 0 then  Exit;
      SendString('GET /copyright.htm HTTP/1.1'+CRLF+CRLF);
      if not ReceivedString('200') then Exit;
      SendString('host: 'FfURL+CRLF+CRLF);
      if not ReceivedString('200') then Exit;
    //Procédure pour récuperer la page : <HTML>.....</HTML>
    end;

    Il te reste le plus simple à faire

  • signaler à un administrateur
    Commentaire de Bacterius le 25/07/2008 16:20:21

    Bonjour,
    @Caribensila : merci pour le code du RunOnce, c'est vrai qu'il est plutôt facile (vu ton code) à mettre en fonction, alors qu'un composant est beaucoup plus gênant (il faut l'installer, etc ...)
    Merci :)

    @Francky : merci d'essayer de m'aider pour le composant, je comprends le principe, mais, je ne connais rien à la conception de composants, et je doute que j'aie le niveau de programmation necessaire pour pouvoir en faire. Mais je vais quand même essayer de voir comment je pourrais faire pour le composant.
    Merci à vous deux :)
    Je vais travailler dessus dès que possible, mais là je réinstalle Windows sur mon ordinateur, et je ne peux donc rien faire pour l'instant, je pourrai m'y mettre ce soir ou demain :p
    Je suis sur l'ordinateur d'un ami ^^

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Caribensila le 25/07/2008 17:15:42

    Si je peux me permettre encore un petit conseil, Bacterius...
    Ton source est sans doute un très bon exercice pour toi et j'espère que les conseils de notre communauté te font progresser. Mais il a un gros défaut qui empêche sans doute beaucoup d'entre nous de le tester. C'est qu'on a déjà vu le sujet traité plusieurs fois sur ce site.
    Tu aurais pu, avec le même principe, faire preuve d'un peu plus d'originalité. Par exemple un programme qui te prévient quand une nouvelle question est posée sur le forum de delphifr ou un truc du même genre.
    Tu aurais appris tout autant et peut-être même plus; et ça aurait intéressé beaucoup plus de monde.
    Essaie d'appliquer ce principe à l'avenir. Ce sera davantage profitable pour tout le monde.
    D'ailleurs, rien ne t'empêche d'essayer de coder l'idée que je viens de te donner, maintenant que tu es à l'aise dans ce genre de problèmes  ;)

    En tout cas, on te voit progresser à vu d'oeil.
    Bravo, et continue comme ça!

  • signaler à un administrateur
    Commentaire de Francky23012301 le 25/07/2008 17:18:28

    Le composant est déja fais : tu copie le code dans le blockNote et tu l'enregistre sous IPAddress.pas et d'installer le composant normalement.

    Ensuite : tu as juste à mettre function GETIP(Var FileText:TStringList): boolean; (désolé d'avoir oublié Var FileText:TStringList) dans le private et de finir de coder cette fonction en utilisant le protocole HTTP (Voir Iprelax.com).

    type
      TIPAddress = class(TComponent)
      private
        Sock: TSocket;
        function ResolveIP(Const AURL: string): string;
        function GETIP(Var FileText:TStringList): boolean; //ICI
      protected
        FPort:     cardinal;
        FURL: string;
      public

    Tu n'as plus grand chose à faire

  • signaler à un administrateur
    Commentaire de nethacker le 26/07/2008 14:08:36

    Bonjour j'arrive pas à installer Tcooltrayicon ! enfin c'est compilé dans le paquet, mais c'est pas dans la palette ! par contre pas de problèmes avec tous les autres!
    et c'est sur D6  xD
    Merci !

  • signaler à un administrateur
    Commentaire de Bacterius le 26/07/2008 14:22:22

    Bonjour,
    c'est quand même bizarre que certaines personnes y arrivent et pas d'autres. Si tu es sur Delphi 6 alors il faut ouvrir le paquet : CoolTrayIcon_D6plus.dpk
    Et voila normalement ça s'installe, penaud ...
    Essaye ça et si tu as encore des problèmes ... dis le nous :p

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de cirec le 26/07/2008 14:38:20 administrateur CS

    moi je sais pas si le composant s'installe ou pas ...
    je les installes quasiment jamais ^^
    je compile en ligne de commande ce qui m'évite de surcharger l'IDE par contre pour modifier le code il faut passer par un éditeur externe (Ex. NotePad++) ... mais ça le fait ;)

  • signaler à un administrateur
    Commentaire de nethacker le 27/07/2008 17:46:25

    compiler en ligne ! c'est possible ? xD, on pourrait utiliser wine et enfin coder du delphi sous linux ! loin de kylix !

  • signaler à un administrateur
    Commentaire de cirec le 27/07/2008 18:50:52 administrateur CS

    Bien sur que c'est possible et c'est même très pratique.

    Voir ici pour plus d'informations:
    http://delphi.developpez.com/cours/CompilateurLigneCommande/

  • signaler à un administrateur
    Commentaire de mardi4fr le 27/07/2008 19:03:50

    Bonjour ,

    En supprimant dans la procedure TMainForm.UpdateSysTray
    cette ligne I.Free  ,j'ai plus l'erreur AV .

  • signaler à un administrateur
    Commentaire de Bacterius le 27/07/2008 19:08:29

    Bonsoir,
    ah oui en effet bien vu Mardi4Fr !
    Je viens de récuperer mon Delphi et je cherchais justement cette Access Violation.
    Mais il y a une fuite de mémoire dans ce cas ... car sans I.Free, I est recréée sans cesse, et n'est pas détruite. Eventuellement faire une variable SysIcon globale, à créer au lancement de l'appli, et détruite à la fermeture ? c'est peut-être une solution.
    Encore merci Mardi4Fr :)

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 27/07/2008 19:13:08

    Lol je viens d'essayer la variable globale, on reçoit toujours l'erreur AV ...
    je crois que je vais laisser l'icône errer dans la mémoire plutôt que de chercher à résoudre ce problème lol.
    Non je lol je continue à chercher ^^

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de cincap le 28/07/2008 12:15:59

    Bonjour à toutes et à tous,

    Après test sur WinXp pack3 et Delphi6, je constate que les 2 adresses Ip sont les mêmes alors qu'il devrait avoir une différence d'un chiffre entre l'Ip du serveur et l'Ip du client.

    On peut le vérifier avec le bouton "Démarrer" puis "Connexions" puis "afficher toutes les connexions" et dans "Accès à distance" le click droit sur sa connexion, Statut puis onglet détail.

    Bug à la fermeture de l'application.

    Pour ma part, j'utilise le mutex pour ne lancer qu'une seule fois l'application, il y a peut être mieux !

    Enfin, pourquoi ne pas aller plus loin avec le composant "CoolTrayIcon" et afficher l'Ip sur 4 icons dans la TrayIcon avec sens de lecture de l'Ip.

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de cincap le 28/07/2008 16:22:49

    @ Bacterius,

    En utilisant les propriétés du composant TCoolTrayIcon et un TimageList, il y a moyen de lui faire afficher les 3 icons.

    Avec cette modification, l'application à l'air stable.

    procedure TMainForm.UpdateSysTray(szTip: Pchar;IconID: TState);
    begin

       case IconID of
       Connected: TrayIcon.Iconindex := 1;
       Connecting: TrayIcon.Iconindex := 0;
       Disconnected: TrayIcon.Iconindex := 2;
       end;

       TrayIcon.Hint := SzTip;

      end;

    @+,

    Cincap

  • signaler à un administrateur
    Commentaire de Bacterius le 31/07/2008 20:00:01

    Bonsoir,
    Cincap je vais essayer les propriétés IconIndex + une imagelist, en plus l'avantage c'est qu'il n'y a plus besoin de trimbaler 3 icônes avec l'appli :)
    Merci, je vais arranger ça dès que possible.

    Cordialement, Bacterius !

  • signaler à un administrateur
    Commentaire de Bacterius le 31/07/2008 20:02:22

    "Enfin, pourquoi ne pas aller plus loin avec le composant "CoolTrayIcon" et afficher l'Ip sur 4 icons dans la TrayIcon avec sens de lecture de l'Ip." cette méthode à déjà été abordée par un source, et je ne vais pas faire preuve d'originalité si je plagie :o.
    Et de plus pour ceux qui aiment avoir un PC propre et rapide, 4 icônes pour 1 application dans la zone de notif. n'est pas terrible :o (pensez à mon père ... :x)

    Cordialement, Bacterius !

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJ<