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

 Delphi Discussion :

Problème trop bizarre, if, if else ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 114
    Par défaut Problème trop bizarre, if, if else ?
    Salut,
    je développe une application un peut comme VNC.
    Mon problème c'est euh ... dur à expliquer
    Quand je met un
    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
     
    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    if(Socket.ReceiveText='Ouvre_CD') then
    mciSendString('Set cdaudio door open wait', nil, 0, 0);
    if(Socket.ReceiveText='Ferme_CD') then
    mciSendString('Set cdaudio door closed wait', nil, 0, 0);
    if(Socket.ReceiveText='Eteindre_ordinateur') then
    ExitWindowsEx(EWX_POWEROFF  + EWX_FORCE,0);
    if(Socket.ReceiveText='Redémarrer_ordinateur') then
    ExitWindowsEx(EWX_REBOOT + EWX_FORCE,0);
    if(Socket.ReceiveText='Fermer_séssion') then
    ExitWindowsEx(EWX_LOGOFF + EWX_FORCE,0);
    if(Socket.ReceiveText='') then
    showmessage('cool');
    end;
    et que dans le serveur je met un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Send(texte:string);
    var i:integer;
    begin
      for i:=0 to server.Socket.ActiveConnections-1 do
      begin
        server.Socket.Connections[i].SendText(texte);
      end;
    end;
    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
    procedure TForm1.EnvoyerClick(Sender: TObject);
    begin
    case Liste_Fonctions.ItemIndex of
        0 : Send('Ouvre_CD');
        1 : Send('Ferme_CD');
        2 : Send('');
        3 : Send('Bloquer_souris');
        4 : Send('Débloquer_souris');
        5 : Send('');
        6 : Send('Bloquer_clavier');
        7 : Send('Débloquer_clavier');
        8 : Send('');
        9 : Send('Eteindre_ordinateur');
        10 : Send('Redémarrer_ordinateur');
        11 : Send('Fermer_séssion');
    end;
    end;
    Voilà, quand je clique sur "Ouvrir le lecteur CD", c'est le "0 : Send('Ouvre_CD');" et le lecteur s'ouvre mais par contre, quand je clique sur "Fermer la séssion" rien ne se passe, c'est pas normale.
    Pouvez vous m'aider ?
    J'ai essayer avec les "else if () then" mais rien n'y fais.
    Merci !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 596
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 596
    Par défaut Evite de mettre les accents par défaut !
    Bonjour à toutes et à tous,

    @ Chyokyka, pour moi j'évite de mettre les accents sur le "é" et autres.

    Pour la fin de session, moi je mettrai uniquement :

    A tester directement avec le click d'un Tbutton et tu verras que cela fonctionne.

    @+,

    Cincap

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    à vu de nez ça serait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var
      s : string;
    begin
      s := Socket.ReceiveText;
      if s='...' then ... else
      if s='...' then ... ;
    end;
    sinon tu cherches à relire une nouvelle chaine sur chaque IF
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 114
    Par défaut
    Salut, merci pour tous vos conseils mais
    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
    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    s : string;
    begin
    s := Socket.ReceiveText;
    if s='Ouvre_CD' then mciSendString('Set cdaudio door open wait', nil, 0, 0) else
    if s='Ferme_CD' then mciSendString('Set cdaudio door closed wait', nil, 0, 0) else
    if s='Eteindre_ordinateur' then ExitWindowsEx(EWX_POWEROFF  + EWX_FORCE,0) else
    if s='Redémarrer_ordinateur' then ExitWindowsEx(EWX_REBOOT + EWX_FORCE,0) else
    if s='Fermer_session' then ExitWindows(0,0) else
    if s='Bloquer' then
    Bloquer.Interval :=  30000;
    Bloquer.Enabled  := True;
    BlockInput(True);
    end;
    Ne marche toujours pas, c'est pas normale, je peux seulement ouvrir le lecteur CD

    Edit : Enfaite, le serveur marche bien mais c'est le client qui a un problème :
    La fonction 'Send'. Comment y remédier ?

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Remplace le serveur par le NetChat fourni est exemple avec le CD de Delphi, ainsi tu verras mieux tes flux si c'est bien l'envoi qui échoue !

    j'ai massivement utilisé ces composants en D5 et D6, je n'ai jamais eu aucun problème d'envoi !

    j'évite de mettre les accents sur le "é" et autres.
    C'est même pire, session n'a jamais eu d'accent ! et ça c'est juste de l'orthographe ...

    Enfin, envoyer une chaine pourquoi pas, j'aurais personnellement envoyé un record via Stream ... cela permettrait d'écrire aussi un case !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.EnvoyerClick(Sender: TObject);
    begin
        Send(Liste_Fonctions.ItemIndex );
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Send(CodeOp: Integer);
    var i:integer;
    begin
      for i:=0 to server.Socket.ActiveConnections-1 do
      begin
        server.Socket.Connections[i].SendText(IntToStr(CodeOp)); // On peut le faire directement en binaire, mais faisons simple d'abord !
      end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      case StrToIntDef(Socket.ReceiveText, 0) of
        0: mciSendString('Set cdaudio door open wait', nil, 0, 0);
        1: mciSendString('Set cdaudio door closed wait', nil, 0, 0);
        9: ExitWindowsEx(EWX_POWEROFF  + EWX_FORCE,0);
        10: ExitWindowsEx(EWX_REBOOT + EWX_FORCE,0);
        11: ExitWindowsEx(EWX_LOGOFF + EWX_FORCE,0);
      else
        showmessage('cool');
      end;
    end;
    Enfin, une explication est nécessaire, il ne faut pas lire plusieurs fois Socket.ReceiveText, une fois lue, c'est fini, le buffer est vidé, c'est pour cela que Paul TOTH est passé par une variable temporaire !

    Ensuite pour ExitWindowsEx, il faut obtenir des Privilèges


    Voici un petit DPR qui contient un code pour éteindre un ordi (pour une tache planifié par exemple ^_^)
    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
    program ForceShutDown;
     
    uses Windows;
     
    {$R *.res}
     
    procedure ExitWindowsMsg(const PlatformCaption: PChar);
    begin
      case MessageBox(0, PChar('Windows '+PlatformCaption+' : ShutDown(Yes) or Reboot(No) ?'), 'Confirmation', MB_YESNOCANCEL) of
        IDYES : if System.DebugHook = 0 then ExitWindowsEx(EWX_SHUTDOWN, 0) else Beep(3000, 1);
        IDNO : if System.DebugHook = 0 then ExitWindowsEx(EWX_REBOOT, 0) else Beep(2000, 1);
        else
          if System.DebugHook = 0 then Exit else Beep(1000, 1);
      end;
    end;
     
    var
      OSInfo: OSVERSIONINFO;
      TokenHandle, ReturnLength: Cardinal;
      NewState, PreviousState: TTokenPrivileges;
      lpLuid: TLargeInteger;
    begin
      OSInfo.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);
      if GetVersionEx(OSInfo) then
      begin
        if OSInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
        begin
          if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle) then
          begin
            try
              if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', lpLuid) then
              begin
                NewState.PrivilegeCount := 1;
                NewState.Privileges[0].Luid := lpLuid;
                NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
                if AdjustTokenPrivileges(TokenHandle, False, NewState, SizeOf(NewState), PreviousState, ReturnLength) then
                begin
                  ExitWindowsMsg('NT');
                end;
              end;
            finally
              CloseHandle(TokenHandle);
            end;
          end;
        end else
        begin
          ExitWindowsMsg('9x');
        end;
      end;
    end.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 114
    Par défaut
    Salut,
    Merci pour toutes t'es explications !
    J'ai tous compris et ça marche bien en plus !
    Maintenant, pour les streams, aurait tu un exemple comme euh ... envoyer un son ? Par exemple : C:\son.wav ? Merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 114
    Par défaut
    Bon, j'ai sais !
    Ou puis-je trouver les composants 'NMUDP' ?
    Merci.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 596
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 596
    Par défaut Privilèges !
    Bonjour à toutes et à tous,

    @ ShaiLeTroll, c'est vrai que le mot session ne prend pas d'accent, mais une faute d'ortographe est vite arrivée de nos jours surtout depuis l'apparition des SMS.

    Même les membres expérimentés ne sont pas à l'abri.

    En ce qui concerne les privilèges, le PC s'éteindra du moment que l'utilisateur possède le privilège en question (ce qui est pratiquement toujours le cas pour un utilisateur loggué localement) et partant de ce principe, la simple commande :

    ExitWindows(0,0);
    Suffit de terminer une session à mon avis.

    Maintenant c'est vrai que c'est une autre paire de manches sous Vista, je ne sais pas si quelqu'un a testé cette simple commande.

    Pour en revenir à ton DPR bien structuré, je pourrai l'utiliser comment dans le onclik d'un Tbutton ?

    Merci d'avance,

    Cincap

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 968
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 968
    Par défaut
    Jai,
    Citation Envoyé par cincap Voir le message
    @ ShaiLeTroll, c'est vrai que le mot session ne prend pas d'accent, mais une faute d'ortographe est vite arrivée de nos jours surtout depuis l'apparition des SMS.

    Même les membres expérimentés ne sont pas à l'abri.
    Personne n'est à l'abri, c'est clair.

    Mais utiliser l'existence des SMS comme excuse, c'est fort.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 596
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 596
    Par défaut Ce n'est certainement pas comme excuse !
    @ droggo, je n'ai pas exposé cela comme une excuse mais comme un fait, l'écriture manuelle disparaît de notre vie tout tout doucement.

    Avoue que personne ne prend plus la peine d'écrire que par SMS, reçois tu toujours une belle carte de voeux écrite à la main ou bien un SMS.

    Mon message n'avait pas le but de reprocher ou d'excuser qui que se soit même moi, je fais des fautes.

    Merci pour la réponse à ma question !

    @+,

    Cincap

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

Discussions similaires

  1. problème trop bête
    Par hamoudasafira dans le forum C++
    Réponses: 8
    Dernier message: 08/01/2007, 11h28
  2. [Tsockets]Problème : trop lent !
    Par manu5794 dans le forum Delphi
    Réponses: 2
    Dernier message: 10/06/2006, 14h22
  3. Problème très bizarre avec COUNT
    Par Nomade95000 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/10/2005, 14h12
  4. Problème BDD bizarre
    Par helter_skelter dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 25/07/2005, 18h04
  5. Problème: trop de tables ouvertes
    Par DrSlump dans le forum Bases de données
    Réponses: 5
    Dernier message: 05/06/2005, 20h01

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