cs_BlackWood
Messages postés37Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 4 octobre 2006
-
27 mai 2004 à 16:48
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDerniè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;
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...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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;