Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Delphi Seltsame Probleme mit TForm.Canvas (https://www.delphipraxis.net/128058-seltsame-probleme-mit-tform-canvas.html)

implementation 23. Jan 2009 11:03


Seltsame Probleme mit TForm.Canvas
 
Beim folgenden Quelltext bricht das Programm einfach ab.
Es gibt nicht einmal eine Fehlermeldung.
Delphi-Quellcode:
procedure WriteOnScreen(Text: string = ''; Linefeeds: Word = 0);
var i:Byte;
begin
  with Consscreen^ do begin
    Canvas.Font.Color := Consprops.Text;
    Canvas.Font.Name := Consprops.Fontname;
    Canvas.Font.Size := Consprops.Fontsize;
    Canvas.Font.Style := Consprops.Fontstyle;
    Canvas.Brush.Color := Consprops.Textbackground;
    Canvas.TextOut(Consprops.PenLine*(Consprops.Fontsize+3),Consprops.PenPos,Text);
    for i := 0 to Linefeeds do begin
      Consprops.PenPos := 0;
      Inc(Consprops.PenLine);
    end;
  end;
end;
Es sei noch folgendes gesagt:
Delphi-Quellcode:
type
  TConsProps = record
    Fontname: string;
    Fontsize: Integer;
    Text, Textbackground: TColor;
    Fontstyle: TFontstyles;
    PenLine: Word;
    PenPos: Word;
  end;
  TConsScreen = type TForm;
  PConsScreen = ^TConsScreen;

var ConsProps: TConsProps;
var ConsScreen: PConsScreen;
Consscreen wurde längst mit New(Consscreen) erstellt.
Der Aufruf:
1. WriteOnScreen(Text);
2. WriteOnScreen('',1);

Ergebnis der Haltepunkte:
- das Programm läuft ... bis zum ersten Vorkommen von Consscreen^.Canvas
- wenn man alles mit Consprops^.Canvas in Kommentare setzt, bricht das Programm nicht ab.

Wo könnte das Problem liegen :?:

DeddyH 23. Jan 2009 11:07

Re: Seltsame Probleme mit TForm.Canvas
 
Wozu der Zeigertyp auf ein Objekt? Ist das Objekt überhaupt instanziiert worden?

implementation 23. Jan 2009 11:20

Re: Seltsame Probleme mit TForm.Canvas
 
ja, Consscreen wurde instanziert, mit New(Consscreen)

DeddyH 23. Jan 2009 11:24

Re: Seltsame Probleme mit TForm.Canvas
 
Damit hast Du einen Zeiger allokiert, aber worauf?

implementation 23. Jan 2009 11:26

Re: Seltsame Probleme mit TForm.Canvas
 
auf ein TConsscreen im Heap

DeddyH 23. Jan 2009 11:30

Re: Seltsame Probleme mit TForm.Canvas
 
Und dieser TConsscreen ist instanziiert? Das war ja meine Ursprungsfrage.

Luckie 23. Jan 2009 11:36

Re: Seltsame Probleme mit TForm.Canvas
 
Zeig einfach mal etwas mehr Code, sonst fragen wir uns noch zu Tode. Weil eventuell denkst du ja auch, du hättest, aber du hast gar nicht, weil du einen Fehler gemacht hast, von dem du dachtest, du hättest nicht.

implementation 23. Jan 2009 11:58

Re: Seltsame Probleme mit TForm.Canvas
 
DeddyH: ich habe bereits gesagt, dass Consscreen instanziert ist, mit New
der zeiger ist garantiert nicht das problem, das hab ich in dem prog
schonmal so gemacht

Eigentlich hab ich schon alles geschrieben, was damit zusammenhängt

DeddyH 23. Jan 2009 12:01

Re: Seltsame Probleme mit TForm.Canvas
 
Ich glaube, wir reden aneinander vorbei. Du hast Dir (wieso auch immer) einen Zeiger auf eine Klasse definiert. Diese Klasse muss mit
Delphi-Quellcode:
Klasse := TKlasse.Create;
instanziiert werden, wobei Klasse ja dann bereits ein Zeiger ist. Machst Du das nicht, muss es beim
Delphi-Quellcode:
Klassenzeiger^.irgendwas
ja knallen, da das referenzierte Objekt ja gar nicht existiert.

Luckie 23. Jan 2009 12:14

Re: Seltsame Probleme mit TForm.Canvas
 
Er hat keine Klasse, sondern einen Record:
Delphi-Quellcode:
type
  TConsProps = record
    Fontname: string;
    Fontsize: Integer;
    Text, Textbackground: TColor;
    Fontstyle: TFontstyles;
    PenLine: Word;
    PenPos: Word;
  end;
  TConsScreen = type TForm;
  PConsScreen = ^TConsScreen;
Und mit einem Record geht es so:
Delphi-Quellcode:
var
  cs: PConsScreen;
begin
  cs = new(PConsScreen);


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Seite 1 von 2  1 2      

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