begin process at 2010 03 19 08:20:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > IP-MASTER, OU VOTRE IP FACILE !

IP-MASTER, OU VOTRE IP FACILE !


 Information sur la source

Note :
Aucune note
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é :5 623 / 614

Auteur : Bacterius

Ecrire un message privé
Commentaire sur cette source (44)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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 !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

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

 Sources du même auteur

Source avec Zip Source avec une capture UNITÉ DE SUPPORT VISTA
Source avec Zip Source avec une capture GESTION DES "CRASHS D'APPLICATION"
Source avec Zip Source avec une capture CONJECTURE DU CARRÉ DES FACTEURS
Source avec Zip Source avec une capture EFFET VITRE ET THUMBNAILS SOUS VISTA
Source avec Zip Source avec une capture UTILISER UNE DLL INCLUSE EN RESSOURCES

 Sources de la même categorie

Source avec Zip BASE64/BASE64URL ENCODE/DECODE par f0xi
Source avec Zip AFFICHAGE DES INFODFS par fbalien
Source avec Zip Source avec une capture INTRA MESSENGER - DELPHI par keket
Source avec Zip CODAGE DÉCODAGE PDU 7BITS par AccessToYou
Source avec Zip Source avec une capture SIMPLEWEBBROWSER par cantador

 Sources en rapport avec celle ci

Source avec Zip COMMENT CONNAITRE SON IP PUBLIC par the_rain16
Source avec Zip DÉTECTION DE L'IP INTERNET ET LOCAL par Alphus
Source avec Zip IP INTERNET AVEC UN MODEM/ROUTEUR (INDY & SNMP) par ACHPI32
Source avec Zip Source avec une capture IP INTERNET VIA UNE CONNEXION RÉSEAU - RÉCUPÉRER UNE IP DANS... par japee
Source avec Zip Source avec une capture BASE DE REGISTRE SUPPORT DE CHAINE MULTI_SZ par DeeJay

Commentaires et avis

Commentaire de Bacterius le 24/07/2008 13:02:54

Logiciel codé sous Delphi 6 Personal Edition.

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

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 ...

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 !

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.

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)

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 !

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 !

Commentaire de Bacterius le 24/07/2008 20:09:36

Voila c'est fait le nettoyage du zip :)

Cordialement, Bacterius !

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 ;)

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 ...

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 ^^'

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.

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 !

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 !

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 !

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.  ^^

Commentaire de yvessimon le 25/07/2008 09:16:03

Bonjour,

il demande "textTrayIcon"

Salutations

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 !

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 !

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 !

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 !

Commentaire de yvessimon le 25/07/2008 14:59:02

Bonjour,

il demande " RegisterTrayIcons " à la compil !

Salutations

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

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 !

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;

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

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 !

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!

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

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 !

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 !

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 ;)

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 !

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/

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 .

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 !

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 !

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

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

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 !

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 !

Commentaire de Bacterius le 16/09/2008 20:38:02

Hmm Francky, je suis en train de faire le composant ...
Je ne vois pas comment récupérer le contenu de la page avec un GET ...

Pourrais-tu me donner des pistes supplémentaires ?

Cordialement, Bacterius !

Commentaire de ProDeveloppeur le 05/11/2008 18:10:21

Pourquoi le fichier RegisterTrayIcons.pas manque dans le téléchargement ??????? Il est demandé pour l'installation du composant TCoolTrayIcon

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Connaitre ip internet [ par keyser-08 ] boujour à tout le monde Voila j'ai un problème, j'arrive pas à connaitre mon ip internet, grâce à l'idipwatch j'arrive bien à connaitre mon ip local m Recevoir tous les IP d'un réseau local. [ par Lustmord ] Il est possible d'avoir l'information de notre propre IP par des fonctions comme GetHostbyName() et etc...J'aimerais savoir si nous pouvons recevoir t Resolution de nom sur réseau local [ par manu00 ] Bonjour, J'ai cherch&#233; un code source sur ce forum pour faire ceci mais je n'ai rien trouv&#233;... En fait, je dispose d'une liste d'ip r&#233 recuperer ip internet [ par shadrak ] Bonjour, je cherche le moyen de recuperer une Ip Internet, sous delphi 4, j ai bien trouvé plusieurs examples mais tous utilisent du code non compatib Comment récuperrer l'adresse IP de connection internet ? [ par chaced ] voila, en utilisant idipwatch (indy9) mais, ça ne fonctionne pas losque je suis derriere un routeur, donc comment faire pour recuperer l'ip meme derri ip internet [ par houssam500 ] bonjour ! ! jé créer un  aplication de chat sur le principe client / server  quand je met le IP local  l'application marche tres bien entre 2 personne Comment connécté un serveur socket avec IP internet et pas IP locale [ par barketmohamed ] Salut tout le mondeJe suis entrain de réaliser une application client serveur avec les sockets delphi, mais j'ai rencontré un probème, lorsque j'utili Comment faire un "reload" de la Base de Registre ? [ par JulioDelphi ] Hello ! Bonne année !! :DJe m'explique :J'utilise GPEDIT.msc, quand je modifie une valeur, il recharge cette valeur de la BDR. Mais lorsque je modifie base de registre [ par ssad ] comment connaitre la liste du matériels installés, dans la base du registre Recherche dans la base de registre [ par Mimlyne ] Bonjour,J'essaye de savoir comment on recherche à l'aide de delphi, une clé bien spécifique dans une base de registre à un endroit que l'on ne connait


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales