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

Composants VCL Delphi Discussion :

[D7] Équivalent de l'attribut HTML PlaceHolder


Sujet :

Composants VCL Delphi

  1. #21
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    @ Roland : oui, c'était ma première idée, mais celle de Cirec a plus de "classe" !

    Je serai d'avis de mettre la solution de Cirec dans la Faq

    A+
    Charly

  2. #22
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour à tous,

    j'étais loin de me douter que ça vous intéresserait, en tout cas merci pour vos appréciations

    pour le compo ça peut se faire mais je me demande si c'est bien utile
    pour la FAQ pourquoi pas
    en attendant j'ai mis le tout dans une unité à part ce qui permet une compatibilité de D7 à Tokyo 10.2

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    unit crCueBanner;
     
    interface
    uses Windows
         {$if CompilerVersion < 20.00}
           // à partir de D2009 vous devez activer les styles les options du projet
         , XPMan
         {$else}
           // à partir de D2009 les fonctions "Edit_SetCueBannerText" & "Edit_GetCueBannerText"
           // existent déjà. Nous les utiliserons par redirection.
         , CommCtrl
         {$ifend};
     
    // https://msdn.microsoft.com/fr-fr/library/windows/desktop/bb761703(v=vs.85).aspx
    // fonction oublié par Delphi permettant le choix ShowOnFocus: Boolean
    // qui permet ou non de voir le Cue Banner Text quand l'edit à le focus
    // active pour toutes les versions de Delphi
    function Edit_SetCueBannerTextFocused(hwnd: HWND; CueText: PWideChar; DrawFocused: Boolean = True): BOOL;{$if CompilerVersion >= 20.00} inline; {$ifend}
     
     
    {$if CompilerVersion < 20.00}
    //avant D2009 nous devons les déclarer et les implémenter
    // TEdit
    // https://msdn.microsoft.com/fr-fr/library/windows/desktop/bb761701(v=vs.85).aspx
    function Edit_SetCueBannerText(hwnd: HWND; CueText: PWideChar): BOOL;
    // https://msdn.microsoft.com/fr-fr/library/windows/desktop/bb761695(v=vs.85).aspx
    function Edit_GetCueBannerText(hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
     
    // TComboBox
    // https://msdn.microsoft.com/en-us/library/windows/desktop/bb775931(v=vs.85).aspx
    function ComboBox_SetCueBannerText(hwnd: HWND; CueText: PWideChar): BOOL;
    // https://msdn.microsoft.com/en-us/library/windows/desktop/bb775927(v=vs.85).aspx
    function ComboBox_GetCueBannerText(hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
    {$else}
    // depuis D2009 elles existent on va donc les utiliser
    type
    // comme elles ont la même déclaration de type
    // pas besoin de déclarer 2 fonctions supplémentaires
    TSetCueBannerText = function (hwnd: HWND; CueText: PWideChar): BOOL;
    TGetCueBannerText = function (hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
     
    var
    // on utilisera les mêmes pour les TEdit que pour les TComboBox
    Edit_SetCueBannerText,
    ComboBox_SetCueBannerText: TSetCueBannerText;
     
    Edit_GetCueBannerText,
    ComboBox_GetCueBannerText: TGetCueBannerText;
    {$ifend}
     
    implementation
    const
      EM_SETCUEBANNER             = $1501;
      EM_GETCUEBANNER             = $1502;
     
      CB_SETCUEBANNER             = $1703;
      CB_GETCUEBANNER             = $1704;
     
    function Edit_SetCueBannerTextFocused(hwnd: HWND; CueText: PWideChar; DrawFocused: Boolean = True): BOOL;{$if CompilerVersion >= 20.00} inline; {$ifend}
    begin
      Result := BOOL(SendMessage(hwnd, EM_SETCUEBANNER, wParam(DrawFocused), lParam(CueText)));
    end;
    {$if CompilerVersion < 20.00}
    // TEdit
    function Edit_SetCueBannerText(hwnd: HWND; CueText: PWideChar): BOOL;
    begin
      Result := BOOL(SendMessage(hwnd, EM_SETCUEBANNER, wParam(False), lParam(CueText)));
    end;
     
    function Edit_GetCueBannerText(hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
    begin
      Result := BOOL(SendMessage(hwnd, EM_GETCUEBANNER, wParam(CueText), lParam(BufLen)));
    end;
     
    // TComboBox
    function ComboBox_SetCueBannerText(hwnd: HWND; CueText: PWideChar): BOOL;
    begin
      Result := BOOL(SendMessage(hwnd, CB_SETCUEBANNER, 0, lParam(CueText)));
    end;
     
    function ComboBox_GetCueBannerText(hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
    begin
      Result := BOOL(SendMessage(hwnd, CB_GETCUEBANNER, wParam(CueText), lParam(BufLen)));
    end;
     
    {$else}
    initialization
    // redirige les fonctions existantes
    Edit_SetCueBannerText := @CommCtrl.Edit_SetCueBannerText;
    Edit_GetCueBannerText := @CommCtrl.Edit_GetCueBannerText;
     
    ComboBox_SetCueBannerText := @CommCtrl.ComboBox_SetCueBannerText;
    ComboBox_GetCueBannerText := @CommCtrl.ComboBox_GetCueBannerText;
     
    {$ifend}
     
    end.
    les détails et autres explications se trouvent dans l'unité sous forme de commentaires.

    Cordialement,

    @+

  3. #23
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Cirec Voir le message
    pour la FAQ pourquoi pas
    en attendant j'ai mis le tout dans une unité à part ce qui permet une compatibilité de D7 à Tokyo 10.2
    Merci pour l'unité.

    Je viens de réaliser (quoique cela ait été dit au début de la discussion) que pour les dernières versions de Delphi, on n'a pas besoin de tout ça, vu que la propriété TextHint est disponible. L'intérêt pratique des solutions présentées ici serait d'avoir un code compatible avec toutes les versions de Delphi ; ou de pouvoir changer le comportement par défaut (qui est que le champ s'efface dès que curseur y entre, au lieu de s'effacer à la première frappe). Je résume bien la situation ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #24
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Merci pour l'unité.

    Je viens de réaliser (quoique cela ait été dit au début de la discussion) que pour les dernières versions de Delphi, on n'a pas besoin de tout ça, vu que la propriété TextHint est disponible. L'intérêt pratique des solutions présentées ici serait d'avoir un code compatible avec toutes les versions de Delphi ; ou de pouvoir changer le comportement par défaut (qui est que le champ s'efface dès que curseur y entre, au lieu de s'effacer à la première frappe). Je résume bien la situation ?
    très bon résumé
    j'ajouterai juste que ce code pourrait avoir un dernier intérêt qui serait didactique:
    - sur la compatibilité de D7 à Tokyo (déjà cité)
    - sur la redirection de méthodes existantes

    maintenant se pose la question de savoir ce qui doit ou mérite d'être posté et où ?
    je vous laisse décider

    Cordialement,

    @+

  5. #25
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    pour ma part, avec D7, je préfère la simplicité de la première solution proposée par Cirec et je mettrais ceci dans la FAQ comme une des solutions (à tester si elle fonctionne avec les autres version de Delphi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    { ================================================================== }
    const
      EM_SETCUEBANNER             = $1501;
      EM_GETCUEBANNER             = $1502;
    // n'oubliez pas de déposer un TXPManifest sur la fiche
    procedure TForm1.FormShow(Sender: TObject);
    var
      Value: WideString;
    begin
      Value := 'Entrez votre Texte ici';
      SendMessage(Edit1.Handle, EM_SETCUEBANNER, 1, LPARAM(Value));
    end;
    { ================================================================== }
    Elle fonctionne parfaitement : le texte ne s'efface que lorsque l'on débute la frappe. Si on efface le contenu du TEdit, le texte par défaut se réaffiche. Il ne s'efface pas quand le TEdit prend le focus.

    Je conserve cette solution dans mes "cartons" et je pense l'employer dès que l'occasion se présentera.

    A+
    Charly

  6. #26
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Cirec Voir le message
    j'ajouterai juste que ce code pourrait avoir un dernier intérêt qui serait didactique:
    - sur la redirection de méthodes existantes
    En effet.

    Citation Envoyé par Cirec Voir le message
    maintenant se pose la question de savoir ce qui doit ou mérite d'être posté et où ?
    Vu que c'est vous qui maîtrisez le mieux la question, je propose que vous vous en chargiez.

    Il faut rédiger une notice qui reprenne l'ensemble ou l'essentiel des explications et des exemples de code, et ajouter cette notice dans la FAQ, par exemple (bouton "ajouter une question").

    Si vous voulez, vous pouvez poster votre brouillon ici pour bénéficier de notre bienveillante relecture.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #27
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    pour ma part, avec D7, je préfère la simplicité de la première solution proposée par Cirec et je mettrais ceci dans la FAQ comme une des solutions (à tester si elle fonctionne avec les autres version de Delphi) :
    Oui, je pense aussi qu'il faut commencer par cette solution.

    J'ai testé la deuxième solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit_SetCueBannerText(Edit1.Handle, 'Entrez votre Texte ici');
      Edit_SetCueBannerText(Edit2.Handle, 'Votre nom');
    end;
    avec Delphi 10.2 et avec Lazarus.

    La troisième solution (l'unité crCueBanner) pourrait être mise en pièce jointe.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #28
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    et pardon pour le retard

    J'accepte volontiers votre aide, j'ai donc préparé un brouillon que je vous soumets :

    Comment afficher un CueBanner ou PlaceHolder dans un TEdit ?
    Un CueBanner est un texte qui est affiché dans la zone de saisie d'un TEdit quand sa propriété Text est vide.
    À partir de Delphi 2009 cette fonctionnalité est présente sous la forme d'une propriété nommée "TextHint".
    Mais on peut aussi obtenir le même résultat avec Delphi 7.
    Dans tous les cas vous devez activer les Styles Windows, soit en déposant un TXPManifest sur la fiche, soit en choisissant, dans les options du projet, l'option "Activer les thèmes d'exécution."

    Pour une utilisation simple et directe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    { ================================================================== }
    const
      EM_SETCUEBANNER             = $1501;
      EM_GETCUEBANNER             = $1502;
    // n'oubliez pas de déposer un TXPManifest sur la fiche
    procedure TForm1.FormShow(Sender: TObject);
    var
      Value: WideString;
    begin
      Value := 'Entrez votre Texte ici';
      SendMessage(Edit1.Handle, EM_SETCUEBANNER, 1, LPARAM(Value));
    end;
    { ================================================================== }
    Voici une deuxième solution réutilisable et compatible de D7 à Tokyo. L'intérêt de cette solution est d'avoir un code compatible avec toutes les versions de Delphi et de pouvoir éventuellement changer le comportement par défaut qui est que le champ s'efface dès que curseur y entre, au lieu de s'effacer à la première frappe, ce qu'il est possible d'obtenir en utilisant la procédure Edit_SetCueBannerTextFocused :

    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
    unit crCueBanner;
     
    interface
    uses Windows
         {$if CompilerVersion < 20.00}
           // à partir de D2009 vous devez activer les styles dans les options du projet
         , XPMan
         {$else}
           // à partir de D2009 les fonctions "Edit_SetCueBannerText" & "Edit_GetCueBannerText"
           // existent déjà. Nous les utiliserons par redirection.
         , CommCtrl
         {$ifend};
     
    // https://msdn.microsoft.com/fr-fr/library/windows/desktop/bb761703(v=vs.85).aspx
    // fonction oublié par Delphi permettant le choix ShowOnFocus: Boolean
    // qui permet ou non de voir le Cue Banner Text quand l'edit à le focus
    // active pour toutes les versions de Delphi
    function Edit_SetCueBannerTextFocused(hwnd: HWND; CueText: PWideChar; DrawFocused: Boolean = True): BOOL;{$if CompilerVersion >= 20.00} inline; {$ifend}
     
     
    {$if CompilerVersion < 20.00}
    //avant D2009 nous devons les déclarer et les implémenter
    function Edit_SetCueBannerText(hwnd: HWND; CueText: PWideChar): BOOL;
    function Edit_GetCueBannerText(hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
    {$else}
    // comme elle existent depuis D2009
    type
    TEdit_SetCueBannerText = function (hwnd: HWND; CueText: PWideChar): BOOL;
    TEdit_GetCueBannerText = function (hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
     
    // on va les utiliser
    var
    Edit_SetCueBannerText: TEdit_SetCueBannerText;
    Edit_GetCueBannerText: TEdit_GetCueBannerText;
    {$ifend}
     
    implementation
    const
      EM_SETCUEBANNER             = $1501;
      EM_GETCUEBANNER             = $1502;
     
    function Edit_SetCueBannerTextFocused(hwnd: HWND; CueText: PWideChar; DrawFocused: Boolean = True): BOOL;{$if CompilerVersion >= 20.00} inline; {$ifend}
    begin
      Result := BOOL(SendMessage(hwnd, EM_SETCUEBANNER, wParam(DrawFocused), lParam(CueText)));
    end;
    {$if CompilerVersion < 20.00}
    function Edit_SetCueBannerText(hwnd: HWND; CueText: PWideChar): BOOL;
    begin
      Result := BOOL(SendMessage(hwnd, EM_SETCUEBANNER, wParam(False), lParam(CueText)));
    end;
     
    function Edit_GetCueBannerText(hwnd: HWND; CueText: PWideChar; BufLen: Longint): BOOL;
    begin
      Result := BOOL(SendMessage(hwnd, EM_GETCUEBANNER, wParam(CueText), lParam(BufLen)));
    end;
    {$else}
    initialization
    // redirige les fonctions existantes
    Edit_SetCueBannerText := @CommCtrl.Edit_SetCueBannerText;
    Edit_GetCueBannerText := @CommCtrl.Edit_GetCueBannerText;
     
    {$ifend}
     
    end.
    Utilisation de Edit_SetCueBannerText :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    { ================================================================== }
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit_SetCueBannerText(Edit1.Handle, 'Entrez votre Texte ici');
      Edit_SetCueBannerText(Edit2.Handle, 'Votre nom');
    end;
    { ================================================================== }
    Utilisation de Edit_GetCueBannerText :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    { ================================================================== }
    procedure TForm1.Button1Click(Sender: TObject);
    var
      aCueTxt: array[0..255] of WideChar;
    begin
      if Edit_GetCueBannerText(Edit1.Handle, aCueTxt, 256) then
        ShowMessage(aCueTxt);
    end;
    { ================================================================== }
    Utilisation de Edit_SetCueBannerTextFocused :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    { ================================================================== }
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit_SetCueBannerTextFocused(Edit1.Handle, 'Entrez votre Texte ici');
      Edit_SetCueBannerTextFocused(Edit2.Handle, 'Votre nom');
    end;
    { ================================================================== }
    j'attends vos avis et autres suggestions

    Cordialement,
    @+

  9. #29
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    @Cirec

    Je me suis permis d'éditer ton message, pour rajouter des majuscules et autres corrections mineures. Pour moi c'est bon.

    Si les autres n'ont rien à ajouter, tu pourras créer toi-même la nouvelle entrée dans la FAQ.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  10. #30
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    à mon avis la phrase
    Dans tous les cas vous devez activer les Styles Windows, soit en déposant un TXPManifest sur la fiche, soit en choisissant, dans les options du projet, l'option "Activer les thèmes d'exécution."
    devrait être en mise en valeur (gras/couleur?) pour bien indiquer la nécessité
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #31
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour Cirec,

    je ne comprends pas cette phrase :

    Voici une deuxième solution réutilisable et compatible de D7 à Tokyo. L'intérêt de cette solution est d'avoir un code compatible avec toutes les versions de Delphi et de pouvoir éventuellement changer le comportement par défaut qui est que le champ s'efface dès que curseur y entre, au lieu de s'effacer à la première frappe, ce qu'il est possible d'obtenir en utilisant la procédure Edit_SetCueBannerTextFocused :
    Car dans mes tests avec la première solution (sous D7) le texte ne s'efface qu'à la première frappe (et non si le TEdit prend le focus) ?

    A+
    Charly

    PS : @elkader : tu pourrais peut être nous dire ce que tu en penses puisque tu as ouvert ce topic ?

  12. #32
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour Cirec,

    je ne comprends pas cette phrase :



    Car dans mes tests avec la première solution (sous D7) le texte ne s'efface qu'à la première frappe (et non si le TEdit prend le focus) ?

    A+
    Charly

    PS : @elkader : tu pourrais peut être nous dire ce que tu en penses puisque tu as ouvert ce topic ?
    oui et c'est logique, en fait EM_SETCUEBANNER attend 2 paramètres
    "WParam" 0: le texte s'efface au focus 1: le texte s'efface à la première frappe
    & "LParam" pour le Texte lui même

    La fonction la plus simple est écrite de sorte que le texte s'efface à la première frappe "WParam = 1"
    SendMessage(Edit1.Handle, EM_SETCUEBANNER, 1, LPARAM(Value));Alors que de base, dans la VCL, la fonction Edit_SetCueBannerText a "WParam = 0"
    sans possibilité de le modifier tout comme la macro du même nom décrite sur la MSDN.

    Donc pour respecter ceci dans l'unité crCueBanner la fonction "Edit_SetCueBannerText" a le même comportement
    Ensuite il existe une autre Macro "Edit_SetCueBannerTextFocused" qui est prévue pour combler ce manque
    mais ils n'ont pas jugé utile de l'inclure dans la VCL.
    Moi j'ai juste rendu le 3ème paramètre facultatif puisqu'il est par défaut à True.
    function Edit_SetCueBannerTextFocused(hwnd: HWND; CueText: PWideChar; DrawFocused: Boolean = True): BOOL;
    Voilà j'espère que c'est plus claire pour toi

    Merci pour les derniers conseils que je vais appliquer et enfin poster
    Cordialement,

    EDIT: voilà c'est modifié et posté Merci à tous.
    @+

  13. #33
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Cirec Voir le message
    voilà c'est modifié et posté Merci à tous.
    Beau travail !

    La validation de la QR est en cours.

    EDIT : Voilà, c'est fait.

    https://delphi.developpez.com/faq/?p...-dans-un-TEdit
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  14. #34
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Merci Cirec, c'est parfait

    et encore bravo pour cet article qui rend la FAQ de plus en plus complète.

    A+
    Charly

  15. #35
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Juste pour une meilleur clarté à mon sens, j'aurai initialisé en direct les variables pour D2009 dans l'unité crCueBanner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // on va les utiliser
    var
      Edit_SetCueBannerText: TEdit_SetCueBannerText = CommCtrl.Edit_SetCueBannerText;
      Edit_GetCueBannerText: TEdit_GetCueBannerText = CommCtrl.Edit_GetCueBannerText;
    et donc viré la partie initialization

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Express Edition (gratuit)] Cette version est elle suffisante ?
    Par dymezac dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/09/2006, 16h36
  2. Réponses: 14
    Dernier message: 27/08/2006, 19h47
  3. Réponses: 5
    Dernier message: 07/03/2006, 21h56
  4. Réponses: 3
    Dernier message: 24/01/2005, 08h02

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