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

API, COM et SDKs Delphi Discussion :

changer la couleur d'un edit avec les messages


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Par défaut changer la couleur d'un edit avec les messages
    bonjour à tous

    j'aimerais changer la couleur de fond des edits d'une application tierce.
    J'arrive à récupérer les handles de ces champs.
    Avec ceux-ci et les procédures systeme / messages on peux faire beaucoup de choses, comme les rendre invisibles, enabled, les déplacer etc....

    mais malgré mes essais et recherches je ne parviens pas à modifier cette fichue couleur

    je pensais à qqchose comme : sendmessage (handlecible,WM_CTLCOLOREDIT, clred,0);

    est-ce seulement possible ?

    merci pour vos lumières

    David

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Tu ne peux pas !

    WM_CTLCOLOREDIT est un message traité par la fenêtre parente du contrôle en question, celle-ci se charge de redessiner le contrôle.
    De plus, MSDN précise que le message WM_CTLCOLOREDIT n'est jamais envoyé d'un thread à un autre...

    Donc à moins de "hooker" la procédure de traitement des messages de la fenêtre parent de ton contrôle (pas simple du tout !), je ne vois pas comment y parvenir...
    --
    Philippe.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2002
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 76
    Par défaut
    Merci pour ton aide Ph.B.

    Je trouve tout de même très étonnant que l'on puisse lire/écrire le contenu d'un edit (WM_GETTEXT,WM_SETTEXT), modifier ses coordonnées, modifier la status enabled ou visible, etc... le tout avec un simple commande api et le handle, alors que pour la couleur... peanuts !

    Bah, tant pis. Je vais continuer à dessiner un cadre autour de mes edits (sur le device de l'écran).
    C'est pas une méthode trop classe et faut gérer l'effacement en changeant de edit focused mais bon, c'est mieux que rien.

    ++

  4. #4
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut Autre solution...
    Plutôt que de dessiner sur le bureau, tu peux également faire un truc comme ça en redimensionnant la fiche où tu en as besoin...

    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
    object Form1: TForm1
      Left = 0
      Top = 0
      BorderStyle = bsNone
      Caption = 'Form1'
      ClientHeight = 375
      ClientWidth = 651
      Color = clBtnFace
      TransparentColor = True
      TransparentColorValue = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object shp1: TShape
        Left = 0
        Top = 0
        Width = 651
        Height = 375
        Align = alClient
        Brush.Style = bsClear
        Pen.Color = clRed
        ExplicitLeft = 144
        ExplicitTop = 40
        ExplicitWidth = 65
        ExplicitHeight = 65
      end
    end

  5. #5
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut Avec XE2
    Et en Firemonkey, comme on peut jouer sur la transparence et l'opacité, c'est encore mieux

    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
    object Form1: TForm1
      Left = 0
      Top = 0
      BiDiMode = bdLeftToRight
      Caption = 'Form1'
      BorderStyle = bsNone
      ClientHeight = 400
      ClientWidth = 600
      Transparency = True
      Visible = False
      StyleLookup = 'backgroundstyle'
      object Viewport3D1: TViewport3D
        Align = alClient
        Width = 600.000000000000000000
        Height = 400.000000000000000000
        Opacity = 0.500000000000000000
        OnClick = Viewport3D1Click
        Color = claTomato
      end
    end

  6. #6
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut VCL pure
    Plutôt que de faire qu'un rectangle, on peut également,, avec la VCL (et non pas Firemonkey) créer une zone avec une opacité moindre...

    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
    object Form1: TForm1
      Left = 0
      Top = 0
      AlphaBlend = True
      AlphaBlendValue = 128
      BorderStyle = bsNone
      Caption = 'Form1'
      ClientHeight = 375
      ClientWidth = 651
      Color = clRed
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object shp1: TShape
        Left = 0
        Top = 0
        Width = 651
        Height = 375
        Align = alClient
        Brush.Style = bsClear
        Pen.Color = clFuchsia
        Pen.Width = 3
        OnMouseUp = shp1MouseUp
        ExplicitLeft = 272
        ExplicitTop = 168
        ExplicitWidth = 65
        ExplicitHeight = 65
      end
    end

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

Discussions similaires

  1. Changer la couleur d'un pixel avec VTK
    Par Romuuuuu dans le forum C++
    Réponses: 1
    Dernier message: 23/04/2008, 11h08
  2. Réponses: 5
    Dernier message: 30/01/2008, 20h24
  3. Modifier la couleur d'un STATIC avec les API windows
    Par Mirsa dans le forum Visual C++
    Réponses: 31
    Dernier message: 27/11/2006, 11h18
  4. changer la couleur de mon Form1 toutes les secondes
    Par stacker_junior dans le forum C++Builder
    Réponses: 9
    Dernier message: 10/05/2006, 19h36
  5. Changer la couleur d'un mot avec ksh
    Par mzt.insat dans le forum Linux
    Réponses: 7
    Dernier message: 04/05/2006, 12h37

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