Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Per ricavare la lunghezza di una stringa una soluzione che io usavo nel vecchio VB6 era quella di creare a run-time una label con autosize=true e visible=false, inserirgli il testo all'interno e ricavare il suo relativo width... Soluzione come vedi un po' spartana ma forse il NET ci da diverse soluzioni ... basta trovarle nelle immense librerie...

  2. #12
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da TrigunXX
    Per ricavare la lunghezza di una stringa una soluzione che io usavo nel vecchio VB6 era quella di creare a run-time una label con autosize=true e visible=false, inserirgli il testo all'interno e ricavare il suo relativo width... Soluzione come vedi un po' spartana ma forse il NET ci da diverse soluzioni ... basta trovarle nelle immense librerie...
    La soluzione è fin troppo spartana.

    Anche in VB6 era possibile accedere alle API ed ottenere questo genere di informazioni che la Label usa indirettamente per raggiungere i propri scopi.

    Con un attimo di pazienza, cerco e posto un pezzo di codice che dovrebbe risolvere il problema...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #13
    A me serviva non per una stampa ma x altro quindi usavo questa soluzione
    Nel caso di una stampa pero'.... si può dire un inutile dispendio di risorse perchè ci saranno molte frasi di tipo di FONT diverso....ma nel mio caso usavo questo metodo una o 2 volte al massimo quindi nessun problema....

    L'API andrà sicuramente meglio!!!

  4. #14
    Penso che l'API in questione sia la
    Public Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long

  5. #15
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Riporto un pezzo di codice che ho utilizzato (in Delphi) per tracciare un testo misurandone le dimensioni (per poter aggiustare altezza e larghezza del form e accomodarlo al suo interno):
    codice:
    procedure MainForm.OnPaint(e: PaintEventArgs);
    var
      g: Graphics;
      arialFont: System.Drawing.Font;
      greeting: string;
      sizeOfGreeting: SizeF;
      textureImage: System.Drawing.Image;
      textBrush: TextureBrush;
      textOrg: Rectangle;
      p: Point;
    begin
      inherited OnPaint(e);
      g := e.Graphics;
      arialFont := System.Drawing.Font.Create('Arial', 96, FontStyle.Regular);
      greeting := 'Hello, Delphi!';
      sizeOfGreeting := SizeF.Create(g.MeasureString(greeting, arialFont));
      if (Self.Width < sizeOfGreeting.Width + 20) then
        Self.Width := Convert.ToInt32(sizeOfGreeting.Width);
      textureImage := System.Drawing.Image.FromFile('texture.bmp');
      textBrush := TextureBrush.Create(textureImage);
    
      p := Point.Create(10, 10);
      g.DrawString(greeting, arialFont, textBrush, p);
      textOrg := Rectangle.Create(10, 10, 2, 2);
      g.DrawEllipse(Pens.Red, textOrg);
    end;
    Purtroppo non ho il tempo materiale di convertire il codice in altri linguaggio quali VB o C# (da cui ho preso l'esempio), tuttavia si nota abbastanza bene l'uso del metodo Graphics.MeasureString che consente di misurare una stringa passando il testo della stessa e il font utilizzato; il valore restituito, di tipo Size, esprime le dimensioni del testo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #16
    Grazie Alka, é MeasureString anche in vb net, l'ho provato e funziona

  7. #17
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da stellinaxxx
    Grazie Alka, é MeasureString anche in vb net, l'ho provato e funziona
    Sì, le classi utilizzate sono identiche perchè entrambi i linguaggi, Delphi.NET e VB.NET, sfruttano la Framework Class Library (FCL).

    Devi solo fare una trasposizione di sintassi...tutto qui.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.