Problème avec une TComboBox

cs_BlackWood Messages postés 37 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 4 octobre 2006 - 27 mai 2004 à 16:48
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 - 27 mai 2004 à 23:57
Bonjour à tous,

J'ai un problème au niveau d'une TComboBox déclarée dans le code (Pas sur la fiche quoi). Ca m'as l'air bien louche et si quelqu'un peut m'aider, ça serait carrément cool...

Voici (en gros et simplifié) le code :

function TMyClass.MyFunction(Sender: TComponent): TPanel;
var
  MyPanel: TPanel;
  MyCombo: TComboBox;
begin
  MyPanel := TPanel.Create(Sender);

  // Configuration du panel
  with MyPanel do
  begin
    Height:=25;
    Caption := '';
    BevelOuter := bvNone;
  end;

  MyCombo := TComboBox.Create(MyPanel);
  MyPanel.InsertControl(MyCombo);

  // Configuration de la combobox
  with MyCombo do
  begin
    Left := 5; Top := 2;
    Width := 150; Height := 21;
    // Et c'est la que ça merde d'aprés le debugger :
    Items.CommaText := '1,2,3'; 
    Text := Items[0];
  end;

  Result := MyPanel;
end;


Et dans une autre méthode, on a :

...
  NewPanel := MyFunction(NewPanel);
  InsertControl(NewPanel);
...


Auncune erreur de compilation, mais à l'exécution, lorsque j'appelle la méthode précédente, j'ai le message d'erreur :
'Le controle " n'a pas de fenêtre parente', et c'est donc un problème au niveau de l'affectation de MyCombo.Items d'aprés le debugger.

Voilà. Pour celui ou celle qui est motivé, le code est entier, vous pouvez le copier-coller et apprécier l'erreur...

Dans tout les cas, merci d'avance.

BlackWood

2 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
27 mai 2004 à 22:46
Plutôt que :
MyPanel.InsertControl(MyCombo);

met :
MyCombo.Parent := MyPanel;

C'est exactement ce que le message d'erreur du debogueur t'indique de faire.

Si tu veux réaliser les deux opérations en une seule étape, tu peux appeler la méthode CreateParented comme suit :
MyCombo.CreateParented(MyPanel.Handle);
May Delphi be with you
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
27 mai 2004 à 23:57
Je dirais même plus...

Voici le code retouché, adapté pour essai, essayé, et ça fonctionne:

//function TForm1.MyFunction(Sender: TComponent): TPanel;
function TForm1.MyFunction(Sender: TWinControl): TPanel;
var
  MyPanel: TPanel;
  MyCombo: TComboBox;
begin
  MyPanel := TPanel.Create(Sender);
  MyPanel.Parent := (Sender as TWinControl);
  // Configuration du panel
  with MyPanel do
  begin
    Height:=25;
    Caption := '';
    //BevelOuter := bvNone;
    BevelOuter := bvLowered; // pour vérif
  end;

  MyCombo := TComboBox.Create(MyPanel);
  //MyPanel.InsertControl(MyCombo);
  MyCombo.Parent := MyPanel;

  // Configuration de la combobox
  with MyCombo do
  begin
    Left := 5; Top := 2;
    Width := 150; Height := 21;
    // Et c'est la que ça merde d'aprés le debugger :
    Items.CommaText := '1,2,3';
    Text := Items[0];
  end;
  Result := MyPanel;
end;


Et pour tester, un bouton sur Form1:

procedure TForm1.Button1Click(Sender: TObject);
var NewPanel: TPanel;
begin
  //NewPanel := MyFunction(NewPanel);
  NewPanel := MyFunction(Form1);
  //InsertControl(NewPanel);
end;


Bonne prog' :-p
0
Rejoignez-nous