Fonction TextSize dans une unité

Résolu
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 19 juil. 2006 à 17:38
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 20 juil. 2006 à 11:22
Bonjour,


Ca à l'air bête comme chou mais je n'arrive pas à mettre cette fonction dans une unité:
http://www.developpez.com/delphi/faq/?page=typechaine#dimensionstexte
(elle marche très bien dans une tForm)


Il me dit: type object ou class requis...


Je pense pourtant avoir bien mis tout ce qu'il fallait dans les uses:
uses Graphics, SysUtils, Classes, Math, types, Windows, StrUtils;
(j'ai même recopié tous les uses depuis la form ou ça marche...)

David, à VERSAILLES
http://www.gentag.fr

7 réponses

cs_Forman Messages postés 600 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 6 avril 2010 1
19 juil. 2006 à 22:18
Il faut mettre "Graphics" avant "Windows" dans les uses (car il y a un type TBitmap défini aussi dans Windows.pas, qui n'est pas une classe)
3
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
19 juil. 2006 à 17:50
Oups, j'ai oublié de préciser...
Ca plante sur:
C := TBitmap.create;

[;)] David, à VERSAILLES
http://www.gentag.fr
0
Utilisateur anonyme
20 juil. 2006 à 02:59
Salut,

Caribensila : Ce téléscopage a t'il lieu avec toutes les versions de Delphi ? car perso je n'ai jamais rencontré de problèmes.

Merci

@+
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 juil. 2006 à 09:03
Bonjour à tous,

Hé bien, c'est bon à savoir... C'est dommage de passer beaucoup de temps sur une bêtise comme ça !

Merci.

[;)] David, à VERSAILLES
http://www.gentag.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 juil. 2006 à 10:43
Salut,

pas besoin de chercher des complications :

unit UTest;



interface


Uses Windows, Graphics; // et pas besoin d'inverser



Function TextSize(Phrase : string; Police : TFont = nil) : TPoint;
implementation
Function TextSize(Phrase : string; Police : TFont = nil) : TPoint;
var
  DC: HDC;
  X: Integer;
  Rect: TRect;
  C : TBitmap;
begin
  C := TBitmap.create;
  if police <> nilthen  C.canvas.Font : = police;


    Rect.Left := 0;
    Rect.Top:=0;
    Rect.Right:=0;
    Rect.Bottom:=0;
    DC := GetDC(0);
    C.Canvas.Handle := DC;
    DrawText(C.Canvas.Handle, PChar(Phrase), Length(Phrase), Rect, (DT_EXPANDTABS or DT_CALCRECT));
    C.Canvas.Handle := 0;
    ReleaseDC(0, DC);
    result.X:=Rect.Right-Rect.Left;
    result.Y:=Rect.Bottom-Rect.Top;
    C.Free;
end;



end.

Voilà et c'est tout














@+
Cirec
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 juil. 2006 à 10:47
Bonjour Cirec,

En fait, ce que tu viens de donner est ce qu'il faut faire...
Seulement, moi j'avais inversé windows et graphics et ça plantait sans que je sache pourquoi.

[;)] David, à VERSAILLES
http://www.gentag.fr
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 juil. 2006 à 11:22
Ok, en principe l'unité Windows est à déclarer en premier dans les Uses (Form où Unit) ceci pour éviter ce genre de problèmes.

Il existe toute fois d'autres "téléscopages" qui ne peuvent être évités
Ex. dans la création de composant plus particulièrement dans la surcharge de certaines procédures, il y a "téléscopages" entre la variable Rect (TRect) et la fonction Rect (de l'unité Classes) mais dans ce cas c'est une erreur des Dev de Borland.

La solution est d'utiliser Rect (TRect) tel quel et
pour utiliser la fonction Rect il faut écrire Classes.Rect

Voili voilou c'est tout

@+
Cirec
0
Rejoignez-nous