2009-08-14 9 views
0

Exécution d'un projet et obtenait une erreur disant
"Pas assez de paramètres réels" L'erreur est dans "C: \ Program Files \ PBear \ HTMLComponents \ package \ GDIPL2A.pas". L'erreur a pointé trois fois vers "Créer hérité"; lignes 260, 270 et 278. Dans le fichier « GDIPL2A.pas » .Ce code est le suivant: -Trouble with fichier THTML GDIPL2A.pas

var 
    err: integer; 
begin 
inherited Create; 
err := GdipCreateBitmapFromScan0(W, H, 0, PixelFormat32bppARGB, nil, fHandle); 
if err <> 0 then 
    raise EGDIPlus.Create('Can''t create bitmap'); 
end; 

Je me demandais pourquoi il montrerait une erreur dans les fichiers « THTML », qui ne sont que FICHIERS DE L'INSTALLATION DE THTML.I n'a pas même toucher les fichiers THTML.

Veuillez aider

Merci et salutations

Vas

+0

Quelle version de Delphi utilisez-vous? Et de quelle classe sont héritées les classes héritées Create? (recherchez la classe TSomeClass = (quelque part dans la section interface). D'après ce que je lis ici, cela ressemble à un conflit de version, où l'unité est basée sur une autre version de la classe de base qui ne nécessite pas de paramètres. –

+0

Salut Stijn! J'utilise Delphi version 4 et dans le fichier THTML il est mentionné {Version 9.41}. J'ai cherché TSomeClass = class() ..... n'a pas trouvé à la fois dans THTML et dans mon dossier de projet. Merci pour la réponse. -Vas – vas

+0

Delphi 4 a été publié il y a 11 ans! Je me demande si Delphi 2009 sera encore utilisé en 2020 .. –

Répondre

1

A "Pas assez de paramètres réels" erreur sur "Create héritée;" signifie que vous essayez d'appeler un constructeur hérité mais qu'il ne fournit aucun paramètre. Vérifiez la classe dont vous héritez et vous verrez une création qui nécessite certains paramètres. (Si la classe de base n'en a pas, vérifiez son parent, et son parent et ainsi de suite.Vous en trouverez un finalement.) Il devrait être assez évident une fois que vous trouvez la déclaration du constructeur ce que vous devez lui passer .

Votre appel doit ressembler à quelque chose comme:

inherited Create(param1, param2); 
+0

Salut! Mason Je ferai ce que vous avez suggéré. Mais je me demandais que THTML étant une application hautement testée et utilisée, comment l'erreur pourrait-elle pointer vers THTML/GDIPL2A.pas? est-ce parce qu'il y a une erreur dans les fichiers de projet ou de cartographie ou autre chose? – vas

+0

@Mason: En fait, ce n'est pas le cas. Si vous avez un constructeur qui accepte les paramètres, et que le constructeur de l'ancêtre accepte les mêmes paramètres (et les types pour ces paramètres), il est parfaitement acceptable d'utiliser simplement inherited; - le compilateur transmet automatiquement les paramètres vers le haut. Essayez-le vous-même - un test rapide devrait être d'environ 15 lignes de code. –

+0

Ken: Si ça dit "hérité"; alors oui. Mais s'il est dit «hérité Create», comme dans l'exemple ci-dessus, c'est une question très différente. –

1

Je THTML, et il comprend en effet GDIPL2A.pas, qui est un wrapper autour GDIPlus; apparemment THTML utilise GDIPlus pour afficher des images incorporées ou quelque chose.

Un rapide coup d'oeil à la déclaration de TGPImage et TGpBitmap montre les déclarations du constructeur de chaque:


// TGpImage 
public 
    constructor Create(FileName: string; TmpFile: boolean = False); overload; 
    constructor Create(IStr: IStream); overload; 

// TGpBitmap 
public 
    constructor Create(W, H: Integer); overload; 
    constructor Create(IStr: IStream); overload; 

Vous verrez que tous les constructeurs prend au moins un ou deux paramètres; votre appel à Create hérité ne passe pas. Cependant, comme l'appel à inherited est dans un autre constructeur, il devrait fonctionner (et en fait sur ma machine, j'ai juste essayé de reconstruire l'une des démos de THTML et il a recompilé GDIPL2A.pas bien), Vous avez quelque chose d'autre, comme une version différente de GDIPL2A dans votre chemin que le compilateur utilise à la place de celle que vous voyez dans l'éditeur de l'EDI.

En ce qui concerne votre question, j'ai répondu dans le premier paragraphe ci-dessus. Il signale l'erreur dans THTML parce que c'est la copie de GDIPL2A que le compilateur utilise, qui n'est peut-être pas celle que votre code s'attend à utiliser.

Vous pouvez corriger cela soit:

  1. unités Réorganiser dans la clause uses de votre code afin que tous les appels qui provoquent GDIPL2A de compiler utilisent le même;

  2. Copiez le GDIPL2A que votre code pense utiliser dans le dossier source de votre projet, il sera donc compilé à partir de là.Cela va probablement casser THTML si vous l'utilisez dans ce même projet, alors soyez prêt pour cela; Trouvez et résolvez les copies concurrentes de GDIPL2A afin qu'il n'y ait qu'une seule copie disponible sur le chemin de recherche du compilateur;

  3. Supprimez le chemin THTML des chemins de recherche et de bibliothèque de votre projet, si vous ne l'utilisez pas dans votre projet problématique. Vous pouvez également, en utilisant Project | Options | Packages, empêcher le chargement de THTML lorsque vous ouvrez le projet si vous le souhaitez, pour que votre projet se charge plus rapidement.

+0

1) les fichiers (THTML) qui utilisent GDIPL2A sont MetaFilePrinter.pas, htmlview.pas, HTMLUn2.pas, HTMLSubs.pas Comment 2 c "appels qui provoquent la compilation de GDIPL2A utilisent-ils le même"? Pour cela, il suffit de placer le nom "GDIPL2A" dans "l'appel". 2) Sved GDIPL2A.pas dans le dossier du projet et compilé. Toujours obtenir la même erreur. 3) J'avais 2 autres dossiers THTML dans le lecteur C. Alors je les ai enlevés de peur qu'ils n'affectent le mapping/code. Toujours la même erreur. 4) J'ai coché "Projet | Options | Paquets" ... "THTML" n'a pas été ajouté du tout.Dois-je l'ajouter – vas

+0

Bonjour Ken Dans le Delphi4 IDE /Outils/environnement/Library ce qui suit est la mise en correspondance dans l'ordre décroissant: - 1 C: Program Files \ \ PBear \ HTML Components \ THTML \ Package 2 $ (DELPHI) \ Lib 3 $ (DELPHI) \ Bin 4 $ (DELPHI) \ Importations Je me demandais si "Lib, bin, importations" sont nécessaires. Si non, peuvent-ils être supprimés? – vas

+0

Ils peuvent être retirés s'ils ne sont pas nécessaires, mais ils ne devraient pas être le problème. Quelque chose trouve plus d'une copie de GDIPL2A, et les copies ne sont pas les mêmes. Voyez mon étape 3 ci-dessus - utilisez l'Explorateur Windows et recherchez GDIPL2A. *. Débarrassez-vous de tous les fichiers correspondants à l'exception de ceux du dossier THTML (renommez-les en quelque chose de totalement différent, par exemple, comme Different_GDIPL2A.pas). Ensuite, essayez et compilez votre projet. –

0

Je ne sais pas si quelqu'un l'a déjà lu mais mon problème est survenu lors de l'installation de ThtmlViewer. Ma solution était d'éditer le fichier GDIPL2A.pas. Je viens d'ajouter une chaîne de emty et un faux booléen, de sorte que le 3 créer des déclarations ressemblaient à ceci:

inherited Create('', False); 

Et puis tout a bien fonctionné (au moins jusqu'à présent)

(j'ai un vieux Delphi 4 sur un vieux Windows XP sur un vieux PC, non connecté à Internet)

Veuillez

Erling