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 :

Problème avec WM_CTLCOLORDLG sans la VCL ?


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Problème avec WM_CTLCOLORDLG sans la VCL ?
    Bonjour,

    Je souhaite changer la couleur de ma fenêtre via les API Windows mais ça ne fonctionne pas :
    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
     
    function MainProc(hWnd: hWnd; uMsg: DWord; wParam: wParam; lParam: lParam): bool; stdcall;
    var
         WindowWidth    : Integer;
         WindowHeight   : Integer;
         wRect          : TRect;
         CouleurFond    : HBRUSH;
    begin
         Result := true;
         case uMsg of
     
              WM_INITDIALOG :
              begin
                   CouleurFond := CreateSolidBrush($00FDEBD0);
              end;
     
              WM_CTLCOLORDLG :
              begin
                   Result := LongBool(CouleurFond);
              end;
     
              WM_CLOSE :
              begin
                   EndDialog(hWnd,0);
              end;
     
              WM_DESTROY :
              begin
                   PostQuitMessage(0);
              end;
     
              else
                   Result := false;
         end;
    end;
    Mon projet est téléchargeable ici : http://cjoint.com/data/hcpHFXrnUv_API.zip

    A noter que j'ai égelement le problème avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
               WM_CTLCOLOREDIT :
              begin
                   SetBkMode(wParam,TRANSPARENT);
                   SetTextColor(wParam,$00FFFFFF);
                   Result := LongBool(CouleurContour);
              end;
    Merci,
    ZiP

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Lorsque tu créer une variable à l'intérieur de cette procèdure (MainProc),
    ces variables sont remise à zéro à chaque fois.
    Donc pour créer les Brush requis pour tes évènement, tu dois les déclarer
    Globalement.

    Lorsqu'on créer des choses, on doit normalement les détruires aussi...
    (voir WM_DESTROY)

    donc mon choix de couleur est de très mauvais gout mais c'est fonctionnel.

    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
     
    //== VARIABLES GLOBALES == 
    Var
      hDlg: DWord = 0;
      hName: hWnd = 0;
      hSerial: hWnd = 0;
      CouleurFond: HBRUSH;
      CouleurContour: HBRUSH;
     
    {$R Main.res}
    Function MainProc(hWnd: hWnd; uMsg: DWord; wParam: wParam; lParam: lParam): bool ; Stdcall;
    Var
      WindowWidth: Integer;
      WindowHeight: Integer;
      wRect: TRect;
    Begin
      Result := bool(1);
      Case uMsg Of
        WM_INITDIALOG:
          Begin
            If GetWindowRect(hwnd, wRect) Then
            Begin
              WindowWidth := wRect.Right - wRect.Left;
              WindowHeight := wRect.Bottom - wRect.Top;
              SetDlgItemText(hWnd, LARGEUR, PChar(IntToStr(WindowWidth)));
              SetDlgItemText(hWnd, HAUTEUR, PChar(IntToStr(WindowHeight)));
            End;
            CouleurFond := CreateSolidBrush(rgb(0, 0, 255)); //$00FDEBD0);
            CouleurContour:= CreateSolidBrush(rgb(255, 0, 0));
          End;
        WM_CTLCOLORDLG:
          Begin
            result:=bool(CouleurFond);
          End;
        WM_CTLCOLOREDIT:
          Begin
            SetBkMode(hdc(wParam),TRANSPARENT);
            SetTextColor(hdc(wParam),rgb(255,255,255));//$00FFFFFF); blanc?
            Result := bool(CouleurContour);
          End;
        WM_LBUTTONDOWN:
          Begin
            SendMessage(hWnd, WM_SYSCOMMAND, SC_MOVE + 2, 0);
          End;
     
        WM_SIZE:
          Begin
            WindowWidth := LOWORD(lParam);
            WindowHeight := HIWORD(lParam);
          End;
     
        WM_CLOSE:
          Begin
            EndDialog(hWnd, 0);
          End;
     
        //== Destruction des Brush ici! ==
        WM_DESTROY:
          Begin
            DeleteObject(CouleurFond);
            DeleteObject(CouleurContour);
            //PostQuitMessage(0); <- inutile ici! on est déjà sur le point de quitter!
          End;
     
      Else
        //== assure un traitement par défault ==
        Result := bool(0);
      End;
    End;

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    Merci, ça marche à merveille !

    ZiP

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

Discussions similaires

  1. PERL: Problème avec Tri sans doublon
    Par Sethenssen dans le forum Langage
    Réponses: 4
    Dernier message: 12/11/2009, 16h37
  2. Problème avec HIWORD(lParam) sans la VCL
    Par [ZiP] dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2008, 15h32
  3. Problème avec un menu, sans utilisé de frame
    Par cyraile dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 19/01/2006, 17h57
  4. Réponses: 7
    Dernier message: 23/07/2005, 12h50

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