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

Bases de données Delphi Discussion :

Requete créant des Labels Dynamiquement et les placent dans l'ordre


Sujet :

Bases de données Delphi

Vue hybride

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 166
    Par défaut Requete créant des Labels Dynamiquement et les placent dans l'ordre
    Bonjour!!!!!

    Voilà j'ai une idée que j'ai à peu pres comprise en cherchant sur le forum et un autre (vive la concurrence )

    J'ai une requete qui me donne des pas avec à chaque nom de pas , une valeur (en km)

    (code en entier pour mieux comprendre le programme)
    (partie en gras est celle qui nous intéresse)

    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
    WITH DataModule1.QAfficheMaterielRoulant2 DO
    BEGIN
    SQL.Clear;
    x:=0;
    SQL.add('SELECT * FROM ID_Materiel_Roulant M ');
    SQL.Add('         INNER JOIN Param_LCC L        ON M.ID_Engin = L.ID_Engin_FK1');
    SQL.Add('         INNER JOIN ID_M I             ON M.ID_Engin = I.ID_Engin_FK2');
    SQL.Add('         INNER JOIN Operational_Unit O ON L.Operational_Def = O.Unite_Operationnelle');
    SQL.Add('         INNER JOIN Currency C         ON L.Currency_Name = C.Currency_Name');
    SQL.Add('         INNER JOIN Energy_Unit E      ON L.Definition_Energie_FK1 = E.Definition_Energie');
    SQL.Add('WHERE M.ID_Engin = '+ QuotedStr(ComboBox1.Items[ComboBox1.ItemIndex]));
    SQL.Add('AND Niveau_M <> 6 ');
    SQL.Add('ORDER BY I.Pas_nominal ASC');
    Open;
    First;
    WHILE NOT DataModule1.QAfficheMaterielRoulant2.eof DO
    BEGIN
    Responsable_Label.Caption := combobox1.Items[combobox1.ItemIndex];
    ListBoxMP.Items.Add(FieldByName('Nom_Pas').AsString);
    NumProj_Edit.Text := FieldByName('ID_Projet').AsString;
    NomProj_Edit.Text := FieldByName('Nom_Projet').AsString;
    IDLoco_Edit.Text := FieldByName('ID_Engin').AsString;
    NbLocoParc_Edit.Text := FieldByName('Nb_Loco_Parc').Value;
    TypeMaterielRoulant_ComboBox.Text := FieldByName('ID_MaterielRoulant').AsString;
    PeriodeLCC_Edit.Text := FieldByName('Periode_LCC').Value;
    //NbKmAn_Edit.Text := FormatFloat('###,###,###,00',FieldByName('Nb_Km_Annuel').AsFloat);
    NbKmAn_Edit.Text := FieldByName('Nb_Km_Annuel').Value;
    EnergyDescription_ComboBox.Text:= FieldByName('Definition_Energie').Value;
    DateLCC_Edit.Text := FieldByName('Date_Depart_LCC').Value;
    CmoyEnergie_Edit.Text := FieldByName('Cout_Energie').Value;
    CurName_Combo.Text := FieldByName('Currency_Name').AsString;
    CurValue_Edit.Text := FieldByName('Currency_ValueEuro').Value;
    CurUnit_Edit.Text := FieldByName('Currency_Unit').AsString;
    AbbEnergie_Edit.Text := FieldByName('Unite_Energie').AsString;
    ValeurRefEnergie_Edit.Text := FieldByName('ValeurRef').Value;
    Operational_ComboBox.Text := FieldByName('Unite_Operationnelle').AsString;
    OpAcr_Edit.Text := FieldByName('Operational_Acronym').AsString;
    MoeCh_Edit.Text := FieldByName('MOE_CostHour').Value;
    MoeUh_Edit.Text := FieldByName('Currency_Unit').AsString;
    Responsable_Edit.Text := FieldByName('Responsable_CIM').AsString;
    RCA_Edit.Text := FieldByName('RCA').AsString;
    RespMaint_Edit.Text := FieldByName('Responsable_Maintenance').AsString;
    Next;
    END;
    END;
    Donc dans ce listbox il ya des noms de pas.
    (et dans une table db il y a une valeur par pas en KM)

    - Dans un premier temps, je souhaiterais créer le meme nombre de label qu'il y a de pas dans le ListBox. Je sais que je dois utiliser la Classe TLabel avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    constructor  create (Aowner....)
    Mais je ne sais pas à quel moment je dois l'appeler.... et comment lui dire de prendre le nom du pas ......



    - Dans un deuxieme temps (qui n'a rien a voir avec les base de données quoi que peut etre) , je souhaiterais que ces labels soient placés par ordre croissant suivant une rêgle paramétré (je ne sais pas comment faire pour faire le lien entre les pixels de la Form et l'intervalle kilométrique).


    Bref j'essaie d'avancer mais c'est assez dur pour le moment, car je ne sais vraiment pas ou mettre le constructor....

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 166
    Par défaut
    J'ai commencé par définir mes instructions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      TPasLabel = class(TLabel)
     
      public
     
          constructor Create(AOwner: TComponent); Override ;
     
      end;

    Ensuite j'ai défini cette "procédure" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    constructor TPasLabel.Create(AOwner: TComponent);
    begin
      inherited;
      Name := 'TestPas'+ IntToStr(NbPas+1);
    end;

    Puis j'ai mis l'appel à cette procedure lorsque l'on sait le nombre de pas qu'il y a dansle ListBoxMP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BEGIN
    NbPas := 1;
    WHILE NbPas < ListBoxMP.Items.Count DO
    BEGIN
    PasLabel := TPasLabel.Create(Self);
    NbPas := NbPas + 1 ;
    end;

    Mais il me dit qu'il ne connait pas PasLabel......

    bizarre....

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    As-tu vraiment besoin de ton TPasLabel ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With TLabel.Create(Self) Do begin
                  Parent:=Proprio;             // propriétaire :ta fiche ?
                  Left:=15;                      // position
                  Top:=23+offset;
                  Height:=39;                   // dimension
                  Width:=159;
                  Autosize:=false;
                  Layout:=tlCenter;
                  WordWrap:=True;
                  Name:='TestPas'+ IntToStr(NbPas+1);       // le nom pour pouvoir utiliser FindComponent
                  Caption:=ListBoxMP.Items[i-1];     // Attention le 1er item a le rang 0
               end;

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 166
    Par défaut
    désolé pour la duplication, j'ai perdu la boule, je ne me rappelais pas si javais tout expliqué etc... et comme ça fait 4,5 jours, désolé vraiment....

    Par contre, offset cela prend quoi comme valeur???

  5. #5
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Offset = déplacement "relatif" devra être réglé initialement à 0.
    Le 1er label sera créé à 23 pixel du haut de son parent Puis, après chaque création, il faut augmenter "offset" au minimum de la dimension du composant TLabel sinon les labels vont se chevaucher.
    Admettons qu'on augmente de 30, le 2nd label sera placé à 53 pixels du haut de son parent, etc...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 166
    Par défaut
    juste une derniere question:

    j'incrémente comment?

    je fais au début de la boucle

    offset := offset + 30

    et je mets

    top := 30 + offset ???

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 166
    Par défaut
    mais le truc c'est qu'après je veux faire des drag & drop avec ces labels. Alors je suis bien obligé de passer par le truc constructor sinon les procedures mousemove et moousedown je ne pourrais m'en servir

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 166
    Par défaut
    Maintenant je souhaite lier une 2e serie de label à la 1ere :

    c'est la meme chose mais seulement comment savoir quelle est le bon :

    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
    Offset2 := 0;
    NbPas2 := 0;
    WHILE NbPas2 < ListboxPN.Count DO
    BEGIN
    With TLabel.Create(Self) Do begin
                  Parent:=Form1.PasLabel.......;             // propriétaire :ta fiche ?
                  Left:= 0;
                  Font.Color := ClWhite ;
                  Font.Style := [fsBold];
                  Color := ClNavy ;                      // position
                  Top:=25+Offset2;
                  Height:=13;                   // dimension
                  Width:=25;
                  Autosize:=false;
                  Layout:=tlCenter;
                  WordWrap:=True;
                  Name:='Valeur'+ IntToStr(NbPas2+1);       // le nom pour pouvoir utiliser FindComponent
                  Caption:= ListBoxPN.Items[NbPas2];
                  NbPas2 := NbPas2+1;
                  Offset2 := Offset2 + 16;     // Attention le 1er item a le rang 0
                  //OnMouseMove :=  DeplacerLabel;
                  END;
                  end;
    mhmhm?

    je dois peut etre faire une boucle imbriqué plutot non?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 166
    Par défaut
    voilà mon code:

    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
    Offset := 0;
    NbPas := 0;
    Offset2 := 0;
    NbPas2 := 0;
    
    
    WHILE NbPas2 < ListboxPN.Count DO
    BEGIN
    
         WHILE NbPas < ListboxMP.Count DO
         BEGIN
              WITH TLabel.Create(Self) DO
                  BEGIN
                  Parent:= TabSheet7;
                  Left:= 30;
                  Font.Color := ClWhite ;
                  Font.Style := [fsBold];
                  Color := ClNavy ;
                  Top:=25+Offset;
                  Height:=13;
                  Width:=100;
                  Autosize:=false;
                  Layout:=tlCenter;
                  WordWrap:=True;
                  Name:='TestPas'+ IntToStr(NbPas+1);
                  Caption:= ListBoxMP.Items[NbPas]+ ' : ' ;
                  NbPas := NbPas+1;
                  Offset := Offset + 16;
                  OnMouseMove :=  DeplacerLabel;
                  END;
         END;
    
      WITH TLabel.Create(Self) DO
      BEGIN
      Parent := TabSheet7;
      FocusControl.Name :=  TLabel(FindComponent('TestPas'+ IntToStr(NbPas+1)));  Left:= 130;
      Font.Color := ClWhite ;
      Font.Style := [fsBold];
      Color := ClNavy ;
      Top:=25+Offset2;
      Height:=13;
      Width:=50;
      Autosize:=false;
      Layout:=tlCenter;
      WordWrap:=True;
      Name:='Valeur'+ IntToStr(NbPas2+1);
      Caption:= ListBoxPN.Items[NbPas2];
      NbPas2 := NbPas2+1;
      Offset2 := Offset2 + 16;
                  //OnMouseMove :=  DeplacerLabel;
      END;
    END;
    J'essaie comme cela mais je ne sais pas

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2011, 10h33
  2. créer des labels dynamiquement
    Par kika10 dans le forum VB.NET
    Réponses: 11
    Dernier message: 15/12/2010, 09h56
  3. [XL-2007] Définir des références dynamiques pour les formules internes d'un tableau
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 10/05/2009, 13h05
  4. Problème pour charger des font dynamiquement et les utiliser (marche à moitié)
    Par rigolman dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 31/03/2009, 08h29
  5. Réponses: 4
    Dernier message: 02/02/2009, 09h45

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