Creator Warnung in Classe

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Creator Warnung in Classe

Beitrag von Mathias »

Ich habe folgende Deklaration, dort wird folgende Warnung beim Creator angezeigt.

Code: Alles auswählen

steuerkreuz.pas(21,17) Warning: An inherited method is hidden by "constructor TSteuerKreuz.Create;"

Code: Alles auswählen

type
 
  TSteuerKreuz = class(TPanel)
  private
    FButtonNr: integer;
    BitBtn: array of TBitBtn;
    procedure KreuzClick(Sender: TObject);
  public
    property ButtonNr: integer read FButtonNr;
    constructor Create;  // Zeile 21
    destructor Destroy; override;
  end;
 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Creator Warnung in Classe

Beitrag von theo »

Code: Alles auswählen

TSteuerKreuz = class(TPanel)
  private
...
  public
    constructor Create(TheOwner: TComponent); override;
...
 end


Code: Alles auswählen

constructor TSteuerKreuz.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
end;     

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Creator Warnung in Classe

Beitrag von Mathias »

Danke, jetzt ist die Warnung weg.
Ich hatte mal

Code: Alles auswählen

constructor Create(TheOwner: TComponent);
; versucht, aber ohne Erfolg.

Dort hatte ich nil.

Code: Alles auswählen

inherited Create(nil);



Muss ich bei folgender procedure auch TObject durch TComponent ersetzen ?

Code: Alles auswählen

procedure KreuzClick(Sender: TObject);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Creator Warnung in Classe

Beitrag von theo »

Mathias hat geschrieben:Muss ich bei folgender procedure auch TObject durch TComponent ersetzen ?

Code: Alles auswählen

procedure KreuzClick(Sender: TObject);


Nicht unbedingt. Ich weiss aber nicht, was das genau werden soll.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Creator Warnung in Classe

Beitrag von Mathias »

Ich will ein Steuerkreuz machen, und für die Richtungen verwende ich Button.

Code: Alles auswählen

unit steuerkreuz;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Controls, Buttons, Graphics, Forms, StdCtrls, ExtCtrls;
 
type
 
  { TSteuerKreuz }
 
  TSteuerKreuz = class(TPanel)
  private
    FButtonNr: integer;
    BitBtn: array of TBitBtn;
    procedure KreuzClick(Sender: TObject);
  public
    property ButtonNr: integer read FButtonNr;
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
  end;
 
implementation
 
{ TSteuerKreuz }
 
constructor TSteuerKreuz.Create(TheOwner: TComponent);
var
  i: integer;
 
  procedure SetButton(const BitBtn: TBitBtn; Left, Top: integer; Caption: string);
  begin
    BitBtn.Left := Left * 30;
    BitBtn.Top := Top * 30;
    BitBtn.Caption := Caption;
  end;
 
begin
  inherited Create(TheOwner);
  Caption := 'Kreuz';
  Height := 10;
  Width := 10;
 
  SetLength(BitBtn, 6);
 
  for i := 0 to Length(BitBtn) - 1 do begin
    BitBtn[i] := TBitBtn.Create(Self);
    BitBtn[i].Parent := Self;
    BitBtn[i].Height := 25;
    BitBtn[i].Width := 25;
    BitBtn[i].Tag := i;
    BitBtn[i].OnClick := @KreuzClick;
  end;
  SetButton(BitBtn[0], 1, 0, 'Y+');
  SetButton(BitBtn[1], 1, 2, 'Y-');
  SetButton(BitBtn[2], 0, 1, 'X-');
  SetButton(BitBtn[3], 2, 1, 'X+');
  SetButton(BitBtn[4], 0, 2, 'Z-');
  SetButton(BitBtn[5], 2, 0, 'Z+');
  for i := 0 to Length(BitBtn) - 1 do begin
    if Width <= BitBtn[i].Left + 25 then begin
      Width := BitBtn[i].Left + 25;
    end;
    if Height <= BitBtn[i].Top + 25 then begin
      Height := BitBtn[i].Top + 25;
    end;
  end;
end;
 
destructor TSteuerKreuz.Destroy;
var
  i: integer;
begin
  for i := 0 to Length(BitBtn) - 1 do begin
    BitBtn[i].Free;
  end;
  inherited Destroy;
end;
 
procedure TSteuerKreuz.KreuzClick(Sender: TObject);
begin
  FButtonNr := TButton(Sender).Tag;
  Click;
end;
 
end.


Was noch gut währe, wen ich irgendwie Click; durch Click(ButtonNr) ersetzen könnte.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Socke
Lazarusforum e. V.
Beiträge: 3158
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: Creator Warnung in Classe

Beitrag von Socke »

Mathias hat geschrieben:Muss ich bei folgender procedure auch TObject durch TComponent ersetzen ?

Code: Alles auswählen

procedure KreuzClick(Sender: TObject);

Da das OnClick-Ereginis der Buttons als TNotifyEvent definiert ist, musst du TObject verwenden.

P.S.
Der Owner einer Komponente (TComponent und damit auch alle Steuerelemente wie Buttons, Panels, etc.) sorgt dafür, dass alle ihm gehörende Komponenten freigegeben werden, sobald er selbst freigegeben wird.

Du musst die Buttons also nicht explizit im Destruktor freigeben, es schadet aber auch nicht.

Code: Alles auswählen

  BitBtn[i] := TBitBtn.Create(Self); // da du hier einen Owner angibst
  for i := 0 to Length(BitBtn) - 1 do begin  // musst du sie hier nicht explizit freigeben
    BitBtn[i].Free// Free ist im Destruktor übrigens immer richtig (Destroy nicht immer)
  end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Creator Warnung in Classe

Beitrag von Antrepolit »

Mathias hat geschrieben:Ich will ein Steuerkreuz machen, und für die Richtungen verwende ich Button. (...)


Meinst du so etwas wie TArrow auf der Registerkarte "Misc" des GUI-Designers?
Grüße, Antrepolit

care only if your os is really burning

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Creator Warnung in Classe

Beitrag von Mathias »

Meinst du so etwas wie TArrow auf der Registerkarte "Misc" des GUI-Designers?

Nein.

Bei mir sollte es eine Button-Gruppe geben, so wie im Anhang links-oben.
Dateianhänge
Zwischenablage-1.png
Zwischenablage-1.png (4.08 KiB) 948 mal betrachtet
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten