Réponse acceptée !
Bonjour,
Explications en dessous du code
unit U_TCPListBox;
interface
//====================================
uses
ExtCtrls, StdCtrls, Classes, Controls;
//0type
TCPListBox = class(TCustomPanel)
private
procedure SetLBItems(value: TStrings);
function GetLBItems: TStrings;
protected
LB: TListBox;
//1 public
constructor Create(AOwner: TComponent); override;
published
property LBItems: TStrings read GetLBItems write SetLBItems;
end;
procedure Register;
implementation
constructor TCPListBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent := AOwner as TWinControl;
//2 LB := TListBox.Create(AOwner);
LB.Parent := Self;
//3end;
procedure TCPListBox.SetLBItems(value: TStrings);
begin
LB.Items.Assign(value);
end;
function TCPListBox.GetLBItems: TStrings;
begin
//Result.Assign(LB.Items);
Result := lb.Items;
//4end;
procedure Register;
begin
RegisterComponents('Exemples', [TCPListBox]);
end;
end.
Plusieurs erreurs :
0- inclusion de l'unité Controls car nous avons besoin d'affecter la propriété Parent de ton composant (de type TWinControl).
1- Le champ LB ne doit pas être déclaré avec la propriété Public par défaut car il devient alors accessible depuis l'extérieur sans passer par les accesseurs en lecture comme en écriture. Ici, je l'ai mis en portée protected. Au pire, imagine que le code, quelque part ailleurs détruire ta liste. Comment réagira alors le code de ton composant ?
2- Tout composant visuel a besoin d'avoir sa propriété Parent affectée pour que ses coordonnées soient relatives à son parent et non à la fiche.
3- même remarque que ci-dessus.
4- Là, l'erreur était manifeste et le compilateur renvoyait un message d'avertissement assez explicite :[Avertissement] U_TCPListBox.pas(39): La valeur de retour de la fonction 'TCPListBox.GetLBItems' peut être indéfinie
En effet, si Result est du type TStrings, tu ne créais pas d'objet de type TStrings, donc tu appelais la méthode Assign d'un objet égal à NIL. Mais pourquoi créer un objet liste de chaînes puisque tu disposes déjà de cette structure (membre LB).
Pense à activer les contrôles du compilateur (Projet/Options/Messages du compilateur).
Voilà pour les commentaires et remarques. En espérant que cela t'aidera à y voir plus clair à l'avenir.
Bonne prog' et...
May Delphi be with you !
Pensez à cliquer sur
Réponse acceptée lorsque la réponse vous convient.