Einzelnen Beitrag anzeigen

Nikodel

Registriert seit: 11. Jan 2019
20 Beiträge
 
Delphi XE4 Professional
 
#1

Ausgabe von TextHeight stürzt ab

  Alt 7. Feb 2019, 17:41
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?
  Mit Zitat antworten Zitat