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 :

Caption de Label Modifiable.


Sujet :

Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Caption de Label Modifiable.
    Bonjour et bonsoir à toutes et à tous,

    Je cherche un moyen de pouvoir donner la possibilité à l'utilisateur de modifier le caption d'un Label.

    Plus clairement, je créer une fiche (Form), je dépose 2 ou 3 label avec des DbEdit. Je nomme les labels arbitrairement (Nom, prenom, ville). Admettons que l'utilisateur aurait préféré (Nom Famille, Surnom, country). Comment dois-je procéder ?

    Je sais que je dois mémoriser ces captions en base de données, et je souhaite donné la modification par un clique droit sur le label, mais après comment je doit procéder pour que l'utilisateur puisse taper le nom qu'il désire et que je l'affiche en instantané dans la fiche et qu'il devienne le nouveau caption ?

    Merci pour vos lumières.

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Ce que tu peux faire, c'est déposer un Label sur ta Form et un PopupMenu.
    Tu crées un item "Renommer" dans le PopupMenu, puis, tu implémentes le OnClick comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Renommer1Click(Sender: TObject);
    begin
      Label1.Caption := InputBox('Renommage du label '+Label1.Caption,'Renommage du label '+Label1.Caption,Label1.Caption);
    end;
    Bon, ce n'est qu'une idée et il faudrait reste ça plus général ...
    En espérant t'avoir mis sur une piste

    A+

  3. #3
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Points : 314
    Points
    314
    Par défaut
    salut se que j'aurais fait c'est jouer avec un

    Tedit avec la meme couleur que la form par default et interdire la saisie sauf si

    click droit dessus qui activera le Tedit

    A+

    edit:oups desoler j'avais pas vue le poste ero-sennin
    "Quelle prétention de prétendre que l'informatique est récente: Adam et Eve avaient déjà un Apple!"

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    Salut,

    Ce que tu peux faire, c'est déposer un Label sur ta Form et un PopupMenu.
    Tu crées un item "Renommer" dans le PopupMenu, puis, tu implémentes le OnClick comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Renommer1Click(Sender: TObject);
    begin
      Label1.Caption := InputBox('Renommage du label '+Label1.Caption,'Renommage du label '+Label1.Caption,Label1.Caption);
    end;
    Bon, ce n'est qu'une idée et il faudrait reste ça plus général ...
    En espérant t'avoir mis sur une piste

    A+
    On se rapproche beaucoup de ce que je recherche.
    Il reste encore quelques points.

    - Comment faire en sorte d'avoir par fiche (form) une seule procédure popupmenu ?
    - Comment récupérer le sender du popupmenu, parceque je peux pas avoir autant de popup que de label ?
    - Et comment le faire sur le clique droit ?

    Merci.

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Je te propose une autre solution

    Toujours pareil, tu as tes labels sur ta form, etc ...
    Tu crées une procédure RenameLabel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure RenameLabel(myLabel : TLabel);
    begin
      Label1.Caption := InputBox('Renommage du label '+Label1.Caption,'Renommage du label '+Label1.Caption,Label1.Caption);
    end;
    Une fois celle ci créée, il te suffit de l'utiliser comme suit dans l'événement OnMouseDown ou OnMouseUp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(Button = mbRight)then
      RenameLabel(TLabel(Sender));
    Je n'ai pas pu tester sous Delphi donc à voir
    En espérant que ça te corresponde !

    A+

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Petite correction du code d'Ero-sennin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure RenameLabel(myLabel : TLabel);
    begin
      myLabel.Caption := InputBox('Renommage du label '+myLabel.Caption,'Renommage du label '+myLabel.Caption,myLabel.Caption);
    end;
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut Et la sauvegarde !
    Bonjour à toutes et à tous,

    @ Aka Guymelef, pourquoi corriger la méthode de ero-sennin, elle fonctionne telle quelle, Mylabel désigne dans ce cas "label1.caption".

    Et après, il faut penser à sauvegarder avec un fichier *.ini la new valeur du Tlabel pour la prochaine exécution de l'application.

    Je viens de faire un test avec 3 Tlabel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.RenameLabel(myLabel : TLabel);
    begin
      Monlabel.Caption := InputBox('Renommage du label '+Monlabel.Caption,'Renommage du label '+Monlabel.Caption,Monlabel.Caption);
      Monlabel2.Caption := InputBox('Renommage du label '+Monlabel2.Caption,'Renommage du label '+Monlabel2.Caption,Monlabel2.Caption);
    Monlabel3.Caption := InputBox('Renommage du label '+Monlabel3.Caption,'Renommage du label '+Monlabel3.Caption,Monlabel3.Caption);
     
    end;
    Dès que le click droit est pratiqué sur n'importe quel Tlabel, on a le choix de modifier ou d'annuler les "caption" des "Tlabel" concernés.

    Sauvegarde dans fichier *.ini :

    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
     
    uses
    IniFiles
     
    var
      Form1: TForm1;
      FichIni: TIniFile;  // variable du fichier Ini
     
    implementation
     
    {$R *.DFM}
     
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
         FichIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'essai1.ini');
         Monlabel.caption:=FIchini.ReadString('Test','caractere','');
     
         FichIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'essai1.ini');
         Monlabel2.caption:=FIchini.ReadString('Test','caractere2','');
     
        FichIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'essai1.ini');
         Monlabel3.caption:=FIchini.ReadString('Test','caractere3','');
     
         Fichini.free;
     
    End;
     
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     
      FichIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'essai1.ini');
      FichIni.WriteString('Test','caractere',Monlabel.caption);
     
      FichIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'essai1.ini');
      FichIni.WriteString('Test','caractere2',Monlabel2.caption);
     
      FichIni:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'essai1.ini');
      FichIni.WriteString('Test','caractere3',Monlabel3.caption);
     
     
      Fichini.free;
     
    End;
    @+,

    Cincap

  8. #8
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Merci Aka pour ta correction! Je n'avais pas modifié l'intérieur de la procédure (un copier collé ...).

    @ Cincap

    Aka a modifié ma procédure car j'avais laissé Label1.Caption ou lieu de myLabel.Caption
    Sinon, la procédure perd tout de son intérêt, autant mettre le code dans chaque OnMouseDown. Avec cette procédure, on centralise tout, suffit juste de passer le label à modifier

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut Très juste !
    @ Aka Guymelef, meaculpa, j'avais vu la différence entre mylabel et label1 mais je ne pensais pas que dans la procédure, mylabel concernerait tous les labels de la fiche.

    @ ero-sennin, astuce correcte.

    @+,

    Cincap

  10. #10
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    On se rapproche beaucoup de ce que je recherche.
    Il reste encore quelques points.

    - Comment faire en sorte d'avoir par fiche (form) une seule procédure popupmenu ?
    - Comment récupérer le sender du popupmenu, parceque je peux pas avoir autant de popup que de label ?
    - Et comment le faire sur le clique droit ?

    Merci.
    Ton problème est de savoir d'où est appelé un menu local.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.PopInitPopup(Sender: TObject);
    var
      MnuAppelant : TPopupMenu;
    begin
      inherited;
      if Sender is TPopupMenu then
        MnuAppelant := TPopupMenu(sender);
    //  else MnuAppelant := PopUpGenerique;
     
      MnuAppelant.PopupComponent := ActiveControl;
    end;
    Bien sur cela ne focntionne que si ton label peut être "actif" et cela il faudrait le tester.

    Et après tu utilises le code de ero-sennin

    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
     
    procedure TForm1.ItemMenuRenameLabelClick(Sender: TObject);
      procedure RenameLabel(myLabel : TLabel);
      begin
        myLabel.Caption := InputBox('Renommage du label '+myLabel.Caption,'Renommage du label '+myLabel.Caption,myLabel.Caption);
      end;
    begin
        if (Assigned(Sender) and (Sender is tMenuItem)) and
         Assigned(tMenuItem(Sender).actioncomponent) and
         Assigned(tpopupmenu(tmenuitem(Sender).GetParentMenu).PopupComponent) and
         tpopupmenu(tmenuitem(Sender).GetParentMenu).PopupComponent is TLabel   then
      begin
        RenameLabel(TLabel(tpopupmenu(tpopupmenu(tmenuitem(Sender).GetParentMenu).PopupComponent)));
      end
      else
      // Je sais pas
     
    end;
     
     
    Faut tester
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  11. #11
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bonjour,

    J'ai bien parcouru chacune de vos propositions ou remarque.

    @ Ero-senin : Merci pour ta proposition. Donc dans l'idée je n'ai plus besoin de menu en popup, si j'utilise l'evenement Down du composant label et que j'envoi l'info dans une procédure Inputbox ca devrai le faire. Mais j'ai d'autres paramètres à enregistrer.

    @ Aka : Merci pour la correction.

    @ CinCap : Dans l'idée d'enregistrement je vais utiliser une Table Access qui comportera :
    Fiche : nom de la fiche où se trouve le Label
    Composant : Le composant (car je vais pas le faire que pour le Label)
    Libelle : Le caption ou text du composant
    Left, Width, Height, top : On c'est jamais
    NbCarMax, NbCarMini : Droit de saisie pour empeche l'user de taper une ribambelle de lignes pour un simple libellé de Label par exemple
    Fontcolor, FontName, FontSize, FsBold, fsitalic : Caractéristiques du composant
    Comme tu le propose je mettrais tout cela au create de la form et au onclose.

    @Yuck : J'ai pas trop saisie ta proposition, en fait est-ce que tu parle de la récupération du sender du popup ?

    Si je veux donc aller plus loin que la proposition de ero-sennin tout en conservant l'idée général, je doit obligatoirement utiliser un popupMenu, pour ensuite afficher une form, avec choix des couleur polices, format, etc... NON ?

    Là où je pêche encore un peu, c'est d'afficher le popupmenu au bonne endroit, doit-je le faire dans l'evenement onmousedown du label ? si oui quel syntaxe utiliser, sachant qu'une autre fiche doit récupérer plus que le simple caption (font, position, parent...) ?
    et ensuite dans l'idée de cincap enregistrer en close de cette form, mais dans une base cela je sais faire sans problème.

    Merci encore, j'attends vos remarques, suggestion ou lien.

    @+

  12. #12
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    bon, je continue.

    J'en suis au test dans l'evenement oncreate d'une form.
    J'ai rempli à la main (pour le moment) 5 enregistrements dans ma table, puis je fais cela

    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
      with DataModule1.ADOQry do
      Begin
        SQL.Clear;
        SQL.Add('Select * From SysFiches ');
        SQL.Add('Where Fiche= :xFiche');
        Parameters.ParamByName('xFiche').Value := Self.Name;
        Try
          Open;
          While not eof do
          Begin
            Showmessage(Fields.FieldByName('Name').AsString);
            next;
          end;
        finally
          Close;
        end;
      end;
    Comment je peux faire pour qu'il affecte les info par rapport au caption sur lequel il se trouve. J'ai essayé cela sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Fields.FieldByName('Name').AsString is TLabel).Caption := Fields.FieldByName('Libelle').AsString
    Comment puis-je procéder ?

  13. #13
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    En fait, j'ai procédé par components count :

    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
    procedure TForm.FormCreate(Sender: TObject);
    Var
      i: integer;
    begin
      with DataModule1.ADOQry do
      Begin
        SQL.Clear;
        SQL.Add('Select * From SysFiches ');
        SQL.Add('Where Fiche= :xFiche');
        Parameters.ParamByName('xFiche').Value := Self.Name;
        Try
          Open;
          While not eof do
          Begin
            Showmessage(Fields.FieldByName('Name').AsString);
            // Modification du composant
                For i:= Self.ComponentCount - 1 downto 0 do
                begin
                  if(Self.Components[i] is TLabel)
                    And (Self.Components[i].Name = Fields.FieldByName('Name').AsString) then
                    Begin
                      (Self.Components[i] as Tlabel).Caption := Fields.FieldByName('Libelle').AsString;
                    end;
                end;
            next;
          end;
        finally
          Close;
        end;
      end;
    // suite du processus create
    end;
    Puis-je mieux faire dans la partie create de la form ?

    Maintenant comment gérer le popupmenu qui doit afficher une form dans laquelle je dois choisir le new caption, et les fonts.

    Merci.

  14. #14
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Re,

    Je sais je suis un peu malade sur les bords...

    J'ai trouver pour le popupmenu j'ai fais cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure Tform.Label1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      if (Button = mbRight) then
      Begin
        PopupMenu1.Popup(X+Self.Left+Label1.Left+15, Y+Self.Top+Label1.Top+15);
      end;
    end;
    Me reste en cliquant sur le choix renommer de proposer une fenêtre avec choix couleur, polices taille, etc..

    Merci à vous.

  15. #15
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Je n'ai pas Delphi sous la main en ce moment, par contre, pour ce qui est de l'apparition du PopupMenu, faut simplement mettre dans la propriété PopupMenu du TLabel le PopupMenu que tu souhaites ... Automatiquement, la position sera gérée ainsi que l'apparition du Popup via le clic droit

    Dès que je rentre et que j'ai un peu le temps (peut-être lundi), je me pencherai un peu plus sur le sujet si il n'y a pas de nouveau

    A+

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Plutôt qu'une boucle, FindComponent:

    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
    procedure TForm.FormCreate(Sender: TObject);
    Var
      Compo :TLabel;
    begin
      with DataModule1.ADOQry do
      Begin
        SQL.Clear;
        SQL.Add('Select * From SysFiches ');
        SQL.Add('Where Fiche= :xFiche');
        Parameters.ParamByName('xFiche').Value := Self.Name;
        Try
          Open;
          While not eof do
          Begin
            Showmessage(Fields.FieldByName('Name').AsString);
     
            // Modification du composant
            Compo := TLabel(FindComponent(Fields.FieldByName('Name').AsString));
            if Assigned(Compo) then
              Compo.Caption := Fields.FieldByName('Libelle').AsString;
     
            next;
          end;
        finally
          Close;
        end;
      end;
    // suite du processus create
    end;

  17. #17
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Merci ero-sennin, purée j'avais même pas vu.. MDR Je suis prêt à te lire prochainnement sur le sujet.

    AndNotOr, j'ai testé ta solution dés que je l'ai vu, car c'est vrai que accélérer ce traitement m'interresse.
    Mais malheureusement ta proposition ne fonctionne pas, aucun message d'erreur mais aucune modification.
    J'ai essayé en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TLabel(Form1.FindComponent(Fields.FieldByName('Name').AsString));
    Là je tombe sur une belle erreur, pourtant dans la FAQ c'est écrit de cette manière...

    J'attends ton commentaire avec impatience.

    Merci.

  18. #18
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Oups...

    Je viens de trouver...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TLabel(Self.FindComponent(Fields.FieldByName('Name').AsString));
    Va savoir pourquoi Self plutot que Form ???

    Voilà un bon point de règler, merci encore une fois à toi AndNotOr
    (PS : je l'aurais un jour...je l'aurais...)

    Me reste à :
    -1- Afficher une form avec les options (nouveau nom, couleur, police et taille)
    Je ne sais pas encore par où commencer pour facilement récupérer les infos sans forcément passer par des variables globales...
    -2- Enregistrer, bon là je pense faire tout simplement l'inverse du OnCreate en passant par un UpDate (ExecSQL).

    Merci.

  19. #19
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bien,

    J'ai réalisé maintenant la fenêtre (from) qui permet de faire le choix taille, polices, etc...

    Pour correction si nécessaire :

    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
    procedure TForm.Modifier1Click(Sender: TObject);
    begin
      With TFfff.Create(Application) do
      Begin
        Try
          Edit1.Text := TLabel(PopupMenu1.PopupComponent).Caption;
          ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(TLabel(PopupMenu1.PopupComponent).Font.Name);
          ColorBox1.Selected := TLabel(PopupMenu1.PopupComponent).Font.Color;
          SpinEdit1.Value := TLabel(PopupMenu1.PopupComponent).Font.Size;
          if ShowModal = mrOk then
          Begin
            TLabel(PopupMenu1.PopupComponent).Caption := Edit1.Text;
            TLabel(PopupMenu1.PopupComponent).Font.Name := ComboBox1.Items.Text;
            TLabel(PopupMenu1.PopupComponent).Font.Color := ColorBox1.Selected;
            TLabel(PopupMenu1.PopupComponent).Font.Size := SpinEdit1.Value;
            Self.Invalidate;
          end;
          Release;
        Finally
          free;
        end;
      end;
    end;
    Merci à vous.

  20. #20
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Pour le Self à la place du Form1, c'est, si j'ai bonne mémoire, c'est dû au problème que Form1 n'est pas encore connue dans le FormCreate alors que Self oui.
    Bien évidemment, ça renvoie à la même chose...

    Pour la question de la couleur, de la police, taille, tu peux récupérer cela pour ça composant de façon très simple ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fontColor := Label1.Font.Color;
    fontSize := Label1.Font.Size;
    fontName := Label1.Font.Name;
    Etant donné que l'on connait l'objet sur lequel on est, suffit de récupérer ses infos et de les mettre directement dans la fenêtre des options ...

    J'espère que c'est ce que tu voulais

    A+

    EDIT:

    Bon, ba apparemment tu avais trouvé pendant que j'écrivais la réponse

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Modifier le Caption d'un Label avec la valeur d'une cellule
    Par kitcarflo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/04/2008, 11h42
  2. [VBA-E]Modifier la caption d'un label par macro
    Par Gautheron dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/02/2006, 13h07
  3. Affichage du caption d'un label à la verticale
    Par jonathomas dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/12/2005, 15h21
  4. Modifier la taille, la couleur ... dans un label
    Par Guigui_ dans le forum GTK+ avec Python
    Réponses: 3
    Dernier message: 15/07/2004, 17h09
  5. label à caption défilante
    Par ulysse66x dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/06/2003, 21h01

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