Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Ausgabe von TextHeight stürzt ab (https://www.delphipraxis.net/199638-ausgabe-von-textheight-stuerzt-ab.html)

Nikodel 7. Feb 2019 16:41

Ausgabe von TextHeight stürzt ab
 
Hi,
jetzt habe ich einen ganz merkwürdigen Effekt. Ich möchte testweise die Texthöhe in einem TEdit ausgeben:
Code:
procedure TMainForm.drucken1Click(Sender: TObject);
{ es wird von einem A4-Format ausgegangen }
var
  PrintForm: TForm2;
  txth: integer;
begin
  if idx_wd >= 0 then
  begin
    if PrintDialog1.Execute then
    begin
      PrintForm := TForm2.Create(self); // <<-- hier wird das Objekt von Unit2 erzeugt
      ...
      try
        PrintForm.ShowModal;
        // jetzt stehen die Ränder fest
        txth:= PrintForm.Canvas.TextHeight('9');      
        ...
        len_ltick:= ...
        len_stick:=len_ltick - PrintForm.Canvas.TextHeight('9');

      finally
        PrintForm.Free;
      end;
      // Printer.Orientation wird bereits in PrintDialog1 festgelegt
      Edit2.Text:='bl='+border_left.ToString+' bt='+border_top.ToString+
                  ' br='+border_right.ToString+' bb='+border_bottom.ToString+
                  '  ltick='+len_ltick.ToString+' stick='+len_stick.ToString+
                  '  txth='+txth.ToString;         // <<-- txth kann ausgegeben werden
      Application.ProcessMessages;
      Edit2.Text:=Edit2.Text+(PrintForm.Canvas.TextHeight('9')).ToString;  <<-- hier gibt es eine Exception
      Application.ProcessMessages;
      ...
Die Zeilen
Code:
var
  ...
  txth: integer;
...
  txth:= PrintForm.Canvas.TextHeight('9');
...
  Edit2.Text:=Edit2.Text+(PrintForm.Canvas.TextHeight('9')).ToString;
sind extra zum Aufzeigen des Problems eingefügt.

Der Wert von txth lässt sich fehlerfrei berechnen und im Edit2 ausgeben.
Die direkte Ausgabe von "(PrintForm.Canvas.TextHeight('9')).ToString" ergibt jedoch eine Exception "Zugriffsverletzung bei Adresse ..."
Die Variante mit "IntToStr(PrintForm.Canvas.TextHeight('9'))" ergibt das gleiche Problem.

Was ist denn da falsch daran? :cry:

sh17 7. Feb 2019 16:46

AW: Ausgabe von TextHeight stürzt ab
 
PrintForm wurde bereits freigegeben in deinem Codebeispiel (Du musst PrintForm.Free; weiter hinter schieben)

hoika 7. Feb 2019 16:47

AW: Ausgabe von TextHeight stürzt ab
 
Hallo,
nimm mal die doppelten Klammern weg

Delphi-Quellcode:
Edit2.Text:=Edit2.Text+PrintForm.Canvas.TextHeight('9').ToString;

Schokohase 7. Feb 2019 16:52

AW: Ausgabe von TextHeight stürzt ab
 
Zitat:

Zitat von hoika (Beitrag 1424998)
Hallo,
nimm mal die doppelten Klammern weg

Bringt das die Instanz zurück, die er kurz zuvor zerstört hat? Welch ein Magie!

Nikodel 7. Feb 2019 18:42

AW: Ausgabe von TextHeight stürzt ab
 
Zitat:

PrintForm wurde bereits freigegeben in deinem Codebeispiel (Du musst PrintForm.Free; weiter hinter schieben)
Wow, danke, so einfach kann es sein :-D

hoika 7. Feb 2019 19:02

AW: Ausgabe von TextHeight stürzt ab
 
Delphi-Quellcode:
Bringt das die Instanz zurück, die er kurz zuvor zerstört hat? Welch ein Magie!
*
ÖH!!! ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz