Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   FPC / Custom TPaintbox: Onpaint deklarieren (https://www.delphipraxis.net/188566-fpc-custom-tpaintbox-onpaint-deklarieren.html)

hochundweit 16. Mär 2016 13:45

FPC / Custom TPaintbox: Onpaint deklarieren
 
Hallo liebe Delphi/FPC Freunde,
ich habe eine Frage bzgl. der Onpaint Methode der TPaintbox in FPC.
Der Code unten soll mir eine eigene TPaintbox Klasse namens TMyPB erstellen.
Das Onpaint definiere ich ueber die procedure Mypaint.

Beim Kompilieren bekomme ich die Rueckmeldung:
mypaintbox.pas(49,15) Error: Wrong number of parameters specified for call to "Mypaint"
mypaintbox.pas(17,15) Error: Found declaration: Mypaint(TObject);

Wo liegt der Fehler ?
(FPC 3.0.0)

Besten Dank im voraus fuer Euere Inputs !
LG, Wolfgang



Delphi-Quellcode:
unit Mypaintbox;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Grids, ExtCtrls, FGL;


type
  TMyPB = class(TPaintBox)
  private
    x, y: Integer;
    binnum: Integer;
[COLOR="Yellow"]   procedure Mypaint(Sender: TObject);[/COLOR]
  public
    constructor Create(AOwner: TComponent); overload;
    constructor Create(AOwner: TComponent; TLeft,TTop,TWidth,THeight: Integer; xco,yco: Integer; bin: Integer; bincolor: TColor); overload;
    destructor Destroy; override;
end;




implementation



////////////////////////////////////////////////////////////////////////////////
constructor TMyPB.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;


////////////////////////////////////////////////////////////////////////////////
constructor TMyPB.Create(AOwner: TComponent; TLeft,TTop,TWidth,THeight: Integer; xco,yco: Integer; bin: Integer; bincolor: TColor);
begin
  inherited Create(AOwner);
  Left     :=TLeft;
  Top      :=TTop;
  Width    :=TWidth;
  Height   :=THeight;
  Color    :=bincolor;
  x        :=xco;
  y        :=yco;
[COLOR="Yellow"] OnPaint  :=Mypaint;[/COLOR]
end;


////////////////////////////////////////////////////////////////////////////////
destructor TMyPB.Destroy;
begin
  inherited Destroy;
end;


////////////////////////////////////////////////////////////////////////////////
procedure TMyPB.Mypaint(Sender: TObject);
begin
  TMyPB(Sender).Canvas.FillRect(TMyPB(Sender).Canvas.ClipRect);
end;


end.

baumina 16. Mär 2016 14:07

AW: FPC / Custom TPaintbox: Onpaint deklarieren
 
Wenn du nicht im Delphimodus, sondern mit objfpc programmierst, dann musst du bei der Zuweisung ein @ davor machen:
Delphi-Quellcode:
OnPaint := @Mypaint;

hochundweit 16. Mär 2016 14:23

AW: FPC / Custom TPaintbox: Onpaint deklarieren
 
@Baumina: uff, so simpel... Herzlichen Dank ! Ich hatte den Code aus einem meiner alten Delphi-Programme rueberkopiert und mich gewundert,
warum es nicht klappt.

Sir Rufo 16. Mär 2016 16:39

AW: FPC / Custom TPaintbox: Onpaint deklarieren
 
Es empfiehlt sich bei der Ableitung von
Delphi-Quellcode:
TPaintBox
die
Delphi-Quellcode:
protected
Methode Delphi-Referenz durchsuchenTPaintBox.Paint zu überschreiben und nicht die Eigenschaft Delphi-Referenz durchsuchenTPaintBox.OnPaint intern zu belegen.

Die Eigenschaft ist
Delphi-Quellcode:
published
und kann von aussen neu belegt werden und schwupps wird der eigene Code nicht mehr ausgeführt.
Delphi-Quellcode:
procedure TMyPaintBox.Paint;
begin
  // Hier eigener Code vor dem Aufruf von OnPaint
  inherited; // Auskommentieren, wenn OnPaint gar nicht aufgerufen werden soll
  // Hier eigener Code nach dem Aufruf von OnPaint
end;

hochundweit 17. Mär 2016 10:59

AW: FPC / Custom TPaintbox: Onpaint deklarieren
 
@SirRufo Merci, werde ich ausprobieren !


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 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