Fehler in meiner Unit suchen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Fehler in meiner Unit suchen

Beitrag von u-boot »

Vielleicht sehe ich vor lauter Bäumen mal wieder den Wald nicht mehr.
Wo liegen die Fehler der untenstehenden Unit ?
Erste Fehlermeldung ist Runtime Error 210 (Weitere durch den Programmabbruch (noch) nicht vorhanden).

Code: Alles auswählen

unit unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls;
 
type
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
 
  { TB }
 
  TB=class(TGraphicControl)
  private
    countpaint:Integer;
    procedure procedure1;
  protected
  public
    constructor create(Aowner:TComponent);
    procedure Paint; override;
  end;
 
  { TA }
 
  TA=class(TComponent)
  private
    Fvisible: boolean;
    FParent:TWinControl;
    Fvisual: TB;
    procedure Setparent(AValue: TWinControl);
    procedure Setvisible(AValue: boolean);
  protected
  public
    property visible:boolean read Fvisible write Setvisible;
    property parent:TWinControl read FParent write Setparent;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
  end;
 
var
  Form1: TForm1; 
  var testTA:TA;
implementation
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('?');
  testTA:=TA.Create(self);
  testTA.parent:=Form1;
  TestTA.visible:=true;
end;
 
{ TB }
 
procedure TB.procedure1;
begin
  if owner is TA then writeln('hurra') else writeln('doch nicht');
end;
 
constructor TB.create(Aowner: TComponent);
begin
  left:=18;
  top:=11;
  width:=20;
  height:=11;
  countpaint:=0;
end;
 
procedure TB.Paint;
begin
  inc(countpaint);
  if (countpaint mod 2 = 0) then begin
    inherited Paint;
    Canvas.Brush.Color:=$550077;
    Canvas.FillRect(1,1, width-1,height-1);
  end else begin
    procedure1;
  end;
end;
 
{$R *.lfm}
 
{ TA }
 
procedure TA.Setvisible(AValue: boolean);
begin
  if AValue then begin
    if not Assigned(Fvisual) then begin
      Fvisual:=TB.create(self);
      if assigned(FParent) then Fvisual.Parent:=FParent;
    end;
  end else begin
    if Assigned(Fvisual) then  FreeAndNil(Fvisual);
  end;
end;
 
constructor TA.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;
 
destructor TA.Destroy;
begin
  if Assigned(Fvisual) then FreeAndNil(Fvisual);
  inherited Destroy;
end;
 
procedure TA.Setparent(AValue: TWinControl);
begin
  Fvisual.Parent:=AValue;
  FParent:=AValue;
end;
 
end.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler in meiner Unit suchen

Beitrag von theo »

Bestimmt nicht besonders gut ist, dass du bei TB den von TGraphicControl vererbten Konstruktor nicht bedienst.
Override, inherited create...

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Fehler in meiner Unit suchen

Beitrag von u-boot »

Stimmt wird korrigiert.
Ändert leider am bisherigen Fehler allerdings nix.
Bei Einzelschritten tritt der Fehler direkt nach ShowMessage('?'); auf.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Fehler in meiner Unit suchen

Beitrag von Socke »

Designfrage: Warum kapselst du ein Steuerelement in einer nicht-visuellen Komponente, anstatt direkt auf das Steuerelement zuzugreifen?
u-boot hat geschrieben:Bei Einzelschritten tritt der Fehler direkt nach ShowMessage('?'); auf.
Die Zeile testTA.parent:=Form1; würde mir besser passen; Aber es ist schon eine sehr seltsame Stelle, an der du dein TB erstellst…
Bei Einzelschritten reden wir auch alle von "Einen Schritt hinein" (F7) und nicht "Einen Schritt weiter"?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Fehler in meiner Unit suchen

Beitrag von u-boot »

Ah jetz hab ich das ... na muss man auch erst mal drauf kommen, dass der Debugger nicht funktioniert hat und ich die ganze Zeit an der falschen Stelle suche.

Parent einer Komponente zuweisen die es nicht gibt ist natürlich schlechte Idee.....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Fehler in meiner Unit suchen

Beitrag von u-boot »

Socke hat geschrieben:Designfrage: Warum kapselst du ein Steuerelement in einer nicht-visuellen Komponente, anstatt direkt auf das Steuerelement zuzugreifen?
Hmm ich sehe es nicht als "Steuerelement" sondern als "gesteuertes Element".

Somit wollte ich einfach die visuelle Ausgabe auslagern und mich in der nicht-visuellen Komponente auf das wesentliche konzentrieren. Sollte mein Vorhaben irgendwann wirklich mal realität werden und alles klappen erhoffe ich mir in der nonvisuellen Rechenart Ressourcenvorteile. Wobei es durchaus sein kann, dass gegenüber einer visuellen Komponente mit visible:=false kaum Vorteile entstehen werden.

Es ist natürlich auch gut möglich, dass es letztenendes nur ein "gewurschtel" gibt und nix schön getrenntes ...

Erfolgsgarantie gibts also natürlich nicht... aber ich dachte Versuch wärs Wert....
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Antworten