AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Klassen, Vererbung und CAST

Ein Thema von bernhard_LA · begonnen am 12. Nov 2024 · letzter Beitrag vom 22. Nov 2024
Antwort Antwort
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 16:21
kurze Rückmeldung :

ohne den cast auf TBitmap compiliert mein code nicht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#2

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 16:34
Dann hat die Variable "bmp" den falschen Typ!

Und abhängig davon, erlaubt der Compiler, dass dort etwas rein kommt, was kein TBitmap oder Nachfahre ist, womit dieser harte Cast alles noch schlimmer machen wird.


Wenn du dich nicht mit Casts auskennst, dann verwende niemals harte, sondern nur weiche Casts.
hart: TBitmap(bmp) ( @Compiler: MACH ES, ich weiß was ich tue und falls nicht ... selbst Schuld)
soft: (bmp as TBitmap) (lieber Compiler, mach es bitte und wenn falsch, dann hau mir eine runter, damit ich es lerne)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (13. Nov 2024 um 16:39 Uhr)
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
258 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 17:28
Eine TBitmap gibt es auch in WinAPI.Windows: TBitmap = tagBITMAP;

verarbeiteBMP() verwendet vielleicht diesen Typ. Am Besten auch dort den namespace VCL.Graphics. angeben.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
778 Beiträge
 
#4

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 17:40
Eine TBitmap gibt es auch in WinAPI.Windows: TBitmap = tagBITMAP;

verarbeiteBMP() verwendet vielleicht diesen Typ. Am Besten auch dort den namespace VCL.Graphics. angeben.

Womit wir wieder bei Beitrag #3 wären
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#5

AW: Klassen, Vererbung und CAST

  Alt 13. Nov 2024, 18:24
Übergeben wird ein Nachkomme von "VCL.Graphics.TBitMap".
Delphi-Quellcode:
...
verarbeiteBMP( TBitmap(bmp));
Das ruft ja richtig: "Ich bin keine Nachkomme von der TBitmap-Klasse, die diese Funktion erwartet."

Siehe himitsu, so bekommt man auch die richtige Fehlermeldung und läuft nicht in eine Zugriffsverletzung:
Delphi-Quellcode:
...
verarbeiteBMP(bmp as TBitmap);

Geändert von Blup (13. Nov 2024 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Klassen, Vererbung und CAST

  Alt 14. Nov 2024, 05:59
Wie schon erwähnt wäre der Cast auf TBitmap eh unnötig, wenn alles richtig wäre.
kurze Rückmeldung :

ohne den cast auf TBitmap compiliert mein code nicht
Da sollte man doch stutzig werden und die Compiler-Meldungen lesen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
150 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Klassen, Vererbung und CAST

  Alt 14. Nov 2024, 08:58
Überprüfe doch einfach mal die Reihenfolge des per uses eingebundenen Units.
Wenn Du schon oben explizit "VCL.Graphics.TBitMap" angeben musst, dann steht im interface Abschnitt wahrscheinlich

Uses VCL.graphics, WinApi.Windows

Vertausche das und dann solltest Du auch überall das gleiche TBitmap haben.
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Klassen, Vererbung und CAST

  Alt 20. Nov 2024, 12:06
wie müsste ich meine code erweitern damit
Zitat:
FImage.FDIB.dsBm
angelegt wird ?



Delphi-Quellcode:
procedure TBitMapExtension.LoadFromFile(const Filename: String);
var
  flag: bool;
begin

  /// .... für alle unterschiedlichen Grafiktypen

  if (Lowercase(ExtractFileExt(Filename)) = '.jpeg') then
  begin
    LoadJPEG(self, Filename);
    flag := TRUE;
  end;

end;


procedure LoadJPEG(Bmp: TBitMap; Filename: string);
var
  JPEG: TJPEGImage;

begin
  JPEG := TJPEGImage.Create;
  try
    JPEG.LoadFromFile(Filename);

    with Bmp do
    begin

      PixelFormat := pf16bit;
      // Width := jpeg.Width;
      // Height := jpeg.Height;

      Assign(JPEG);

      // PixelFormat := pf24bit;

    end;

  finally
    JPEG.Free;
  end;

end;
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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