/ / Delphi: Comment copier des formulaires - Delphi

Delphi: Comment copier des formulaires - Delphi

J'essaie de copier ou d '"échanger" deux formulaires référencés par un TListBox.

Voici ce que j’essaie de faire, mais j’obtiens une erreur (illustrée ci-dessous):

      cf1 := TCustomform(lstPackages.Items.Objects[origNdx]);
cf2 := TCustomform(lstPackages.Items.Objects[origNdx - 1]);

cfTmp.Assign(cf1); //error here: cannot assign TfPackage to a TfPackage
cf1.Assign(cf2);
cf2.Assign(cfTmp);

lstPackages.Items.Exchange(origNdx, origNdx - 1);
lstPackages.ItemIndex := origNdx - 1;

Donc, j’essaie d’échanger les éléments de la liste et jebesoin de faire quelque chose de similaire avec les formulaires, mais j’obtiens l’erreur que je ne peux pas "attribuer le type de formulaire que j’utilise". TfPackage est un descendant de TCustomForm.

Comment puis-je accomplir la même chose?

Réponses:

1 pour la réponse № 1

TStrings.Exchange échange les objets ainsi que les chaînes de caractères, il est donc déjà pris en charge pour vous. Les mêmes objets de formulaire resteront associés aux mêmes chaînes.

EDIT: En réponse au commentaire, si vous avez besoin d’échanger la position des formulaires dans une autre liste, cela n’est pas difficile. Vous avez l’idée de base juste quand vous avez dit:

cfTmp.Assign(cf1);
cf1.Assign(cf2);
cf2.Assign(cfTmp);

Mais vous n'essayez pas de copier les objets, vous êtesessayer d'échanger des références à eux. Les objets ne sont pas des enregistrements. Dans Delphi, toutes les variables d'objet, y compris celles du conteneur de formulaire, sont des références (pointeurs masqués et implicites) à l'objet. Donc, ce que vous devez faire est:

cfTmp := list[cf1Position];
list[cf1Position] := list[cf2Position];
list[cf2Position] := cfTmp;