Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Komische Fehlermeldung EConvertError (https://www.delphipraxis.net/22093-komische-fehlermeldung-econverterror.html)

Faber 12. Mai 2004 11:00


Komische Fehlermeldung EConvertError
 
Ich habe eine Komponente geschrieben,
die einfacher nicht sein kann:

Delphi-Quellcode:
unit BitmapComp;


interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Dialogs;

type
  TBitmapComp = class(TComponent)
  private
    { Private-Deklarationen }
    fChange : TNotifyEvent;       { Custom Event }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    FBitmap : TBitmap;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    Procedure  SetBitmap(Const ABmp : TBitmap);

  published
    { Published-Deklarationen }
    Procedure HasChanged;
    property Bitmap : TBitmap Read FBitmap Write SetBitmap;
    property OnChangeState : TNotifyEvent read fChange write fChange;
  end;

procedure Register;

implementation

Constructor TBitmapComp.Create(AOwner: TComponent);
Begin
  inherited Create(AOwner);
  FBitmap := TBitmap.Create;
End;

Destructor TBitmapComp.Destroy;
Begin
  FBitmap.Free;
  inherited Destroy;
End;

Procedure TBitmapComp.SetBitmap(Const ABmp : TBitmap);
Begin
  FBitmap.Canvas.Assign(ABmp.Canvas);
  HasChanged;
End;

Procedure TBitmapComp.HasChanged;
Begin
  if Assigned(fChange) then OnChangeState(Self);
End;

procedure Register;
begin
  RegisterComponents('Faber', [TBitmapComp]);
end;

end.

Wenn ich nun aus einem anderen Programm ein Bitmap übergebe,
bekomme ich folgende Fehlermeldung an dieser Stelle:

Procedure TBitmapComp.SetBitmap(Const ABmp : TBitmap);
Begin
  FBitmap.Canvas.Assign(ABmp.Canvas);
""""""""""""""""""""""""""""""""""""""""" EConvertError TBitmap kann nicht TBitmap zugewiesen werden...
  HasChanged;
End;
Kann mir da jemand weiterhelfen????

So übergebe ich das Bitmap:

Delphi-Quellcode:
procedure TPluginScanner.TwainTwainAcquire(Sender: TObject;
  const Index: Integer; Image: TBitmap; var Cancel: Boolean);
begin
  BitmapComp.Bitmap := Image;
  Cancel := TRUE; {Only want one image}
end;
Danke schon mal !!!

[edit=sakura] [delphi]tags Mfg, sakura[/edit]

Faber 12. Mai 2004 11:03

Re: Komische Fehlermeldung EConvertError
 
Ist natürlich falsch, habe nur mal eine andere
Variante versucht...

Im Orginal steht das:

Delphi-Quellcode:
Procedure TBitmapComp.SetBitmap(Const ABmp : TBitmap);
Begin
  FBitmap.Assign(ABmp);
  """"""""""""""""""""""""""""""""""""""""" EConvertError TBitmap kann nicht TBitmap zugewiesen werden...
  HasChanged;
End;
Funktioniert aber auch nicht...

Ist übrigends unter Delphi 7 aufgetreten

[edit=sakura] [delphi]tags Mfg, sakura[/edit]

sakura 12. Mai 2004 11:05

Re: Komische Fehlermeldung EConvertError
 
Hi,

damit ich in Zukunft Dir nicht hinterher rennen muss, ließ mal den einen Punkt - hättest eigentlich alle lesen sollen: 2.3.1 - Quellcode im Beitrag? So geht's

...:cat:...

Muetze1 12. Mai 2004 19:54

Re: Komische Fehlermeldung EConvertError
 
Moin!

Irgendwas war mit dem TBitmap Properties und erstellen der TBitmap Instanz was man beachten musste. Ich schau morgen mal auf Arbeit nach wie das war, das habe ich mir aufgeschrieben, dann poste ich hier mal die Sache...

MfG
Muetze1

Faber 12. Mai 2004 20:18

Re: Komische Fehlermeldung EConvertError
 
wieso ist eigendlich in der Windows Unit auch ein Typ
TBitmap definiert???

Delphi-Quellcode:
{ Bitmap Header Definition }
  PBitmap = ^TBitmap;
  {$EXTERNALSYM tagBITMAP}
  tagBITMAP = packed record
    bmType: Longint;
    bmWidth: Longint;
    bmHeight: Longint;
    bmWidthBytes: Longint;
    bmPlanes: Word;
    bmBitsPixel: Word;
    bmBits: Pointer;
  end;
***
  TBitmap = tagBITMAP;
***
  {$EXTERNALSYM BITMAP}
  BITMAP = tagBITMAP;

**********************************************
Und hier in der Graphics Unit:
**********************************************

  TBitmap = class(TGraphic)
  private
    FImage: TBitmapImage;
    FCanvas: TCanvas;
  ...
Wenn ich ein TBitmap Objekt erzeuge und
die Reihnfolge: Graphics, Windows wähle,
hab ich ein Problem...

fred.reichbier 14. Mai 2004 14:43

Re: Komische Fehlermeldung EConvertError
 
probier mal die windows-unit in der uses-klausel auszulassen.
hoffe, ich konnte dir helfen.

Muetze1 14. Mai 2004 15:56

Re: Komische Fehlermeldung EConvertError
 
Moin!

Die in Windows definierte Struktur ist z.B. für die WinAPI Funktion CreateBitmap(). Da Delphi alle Strukturen vorne mit einem T definieren wurde die API Struktur BITMAP zu TBITMAP. Und Graphics definiert die TBitmap Klasse. Falls sich mal die Definitionen ins Gehege kommen und man die Klasse haben will, dann einfach die Graphics Unit als letztes in die Unit Liste schreiben (nach Windows), oder bei den Definitionen der TBitmap einfach immer ein Graphics. davor schreiben.

MfG
Muetze1

SirThornberry 14. Mai 2004 16:10

Re: Komische Fehlermeldung EConvertError
 
man sollte sich allgemein angewöhnen die "windows" unit als erstes aufzuführen. Ich hatte es schon paar mal das sich ein projekt nicht kompilieren lies mit diversen fehlermeldungen nur weil die "windows"-unit nicht als erste aufgeführt wurde und somit incompatible typen und falsche parameter-meldungen kamen


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr.

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