![]() |
Seltsame Probleme mit TForm.Canvas
Beim folgenden Quelltext bricht das Programm einfach ab.
Es gibt nicht einmal eine Fehlermeldung.
Delphi-Quellcode:
Es sei noch folgendes gesagt:
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;
Delphi-Quellcode:
Consscreen wurde längst mit New(Consscreen) erstellt.
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; 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 :?: |
Re: Seltsame Probleme mit TForm.Canvas
Wozu der Zeigertyp auf ein Objekt? Ist das Objekt überhaupt instanziiert worden?
|
Re: Seltsame Probleme mit TForm.Canvas
ja, Consscreen wurde instanziert, mit New(Consscreen)
|
Re: Seltsame Probleme mit TForm.Canvas
Damit hast Du einen Zeiger allokiert, aber worauf?
|
Re: Seltsame Probleme mit TForm.Canvas
auf ein TConsscreen im Heap
|
Re: Seltsame Probleme mit TForm.Canvas
Und dieser TConsscreen ist instanziiert? Das war ja meine Ursprungsfrage.
|
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.
|
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 |
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:
instanziiert werden, wobei Klasse ja dann bereits ein Zeiger ist. Machst Du das nicht, muss es beim
Klasse := TKlasse.Create;
Delphi-Quellcode:
ja knallen, da das referenzierte Objekt ja gar nicht existiert.
Klassenzeiger^.irgendwas
|
Re: Seltsame Probleme mit TForm.Canvas
Er hat keine Klasse, sondern einen Record:
Delphi-Quellcode:
Und mit einem Record geht es so:
type
TConsProps = record Fontname: string; Fontsize: Integer; Text, Textbackground: TColor; Fontstyle: TFontstyles; PenLine: Word; PenPos: Word; end; TConsScreen = type TForm; PConsScreen = ^TConsScreen;
Delphi-Quellcode:
var
cs: PConsScreen; begin cs = new(PConsScreen); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
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