Zeichnen TImage falsche Farbe bei Hintergrundbild

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichnen TImage falsche Farbe bei Hintergrundbild

Beitrag von theo »

Du bringst wieder Klassenmethoden mit normalen durcheinander.

Hast du das schon gelesen?
https://www.delphi-treff.de/object-pasc ... d-objekte/
Nimm dir Zeit dafür, das zu verstehen.
Es ist eine tolle, knappe Zusammenfassung des Wesentlichen in Punkto Delphi und Objektorientierung.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Zeichnen TImage falsche Farbe bei Hintergrundbild

Beitrag von compmgmt »

vazili_Zaitzef hat geschrieben:[...]

Code: Alles auswählen

procedure TForm1.Button3Click(Sender: TObject);
begin
  TVersuch.Zweitefunction();
end;
[...]
Und schon ist der Fehler da...

Du musst auch eine Variable nehmen, nicht die Klasse. Die Klasse ist quasi nur die "Vorlage". Allgemein musst du folgendermaßen vorgehen:
1. Erstellen
2. Funktionen der Klasse Aufrufen
3. Zerstören und Freigeben, wenn es nicht mehr benötigt wird. (in bestimmten Fällen nicht notwenig, da es automatisch gemacht wird)

Also in deinem Beispiel ungefähr so:

Code: Alles auswählen

 
var
  Versuch: TVersuch; // Variable definieren
begin
  Versuch := TVersuch.Create; // Erstellen
  Versuch.ZweiteFunktion; // Funktionsaufruf
end;

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: Zeichnen TImage falsche Farbe bei Hintergrundbild

Beitrag von vazili_Zaitzef »

Danke :)

Vollhorst im Dienst. Gleiche Fehler ein zweites Mal :oops:
Danke für die Hilfe :)

Da habe ich noch eine Frage :?:

Kann man auch Klassen weiter runter brechen?

Versuch.ZweiteFunktion.ErsteOperation

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Zeichnen TImage falsche Farbe bei Hintergrundbild

Beitrag von m.fuchs »

vazili_Zaitzef hat geschrieben:Kann man auch Klassen weiter runter brechen?

Versuch.ZweiteFunktion.ErsteOperation


Warum nicht:

Code: Alles auswählen

unit MeineUnit;
{$MODE ObjFpc}
{$H+}
 
interface
 
uses
  Classes, SysUtils;
 
type
  TMeineSubClass = class(TObject)
    public
      procedure MeineMethode;
  end;
 
  TMeineClass = class(TObject)
    private
      FMeineSubClass: TMeineSubClass;
    public
      property MeineSubClass: TMeineSubClass read FMeineSubClass;
    public
      constructor Create;
      destructor Destroy; override;
  end;
 
var
  MeineClass: TMeineClass;
 
implementation
 
procedure TMeineClass.SetMeineSubClass(AValue: TMeineSubClass);
begin
  if FMeineSubClass = AValue then Exit;
  FMeineSubClass := AValue;
end;
 
constructor TMeineClass.Create;
begin
  inherited Create;
  FMeineSubClass := TMeineSubClass.Create;
end;
 
destructor TMeineClass.Destroy;
begin
  FreeAndNil(FMeineSubClass);
  inherited Destroy;
end;
 
procedure TMeineSubClass.MeineMethode;
begin
  Beep;
end;
 
initialization
  MeineClass := TMeineClass.Create;
 
finalization
  FreeAndNil(MeineClass);
 
end.


Der Aufruf kann dann zum Beispiel so erfolgen:

Code: Alles auswählen

program Project1;
{$MODE ObjFpc}{$H+}
 
uses
 Classes, MeineUnit;
 
begin
  MeineUnit.MeineClass.MeineSubClass.MeineMethode;
end.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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

Re: Zeichnen TImage falsche Farbe bei Hintergrundbild

Beitrag von Mathias »

Kann man auch Klassen weiter runter brechen?

Dazu noch was lustiges, sowas wird fehlerlos kompiliert. Aber beim Ausführen wird ein SIGSEV ausgelöst. :mrgreen:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Parent.Parent.Parent.Parent.Parent.Parent.Parent := Self;
end;


Ein Beispiel, das eher Sinn mach, da sieht man die Verschachtelung sehr gut.
Es Wird dass erste Byte eine Images ausgelesen.

Code: Alles auswählen

var
  b: byte;
begin
  b := Image1.Picture.Bitmap.RawImage.Data^;
 
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

vazili_Zaitzef
Beiträge: 43
Registriert: Do 6. Dez 2012, 21:55
OS, Lazarus, FPC: Win7 64 (L 1.6 FPC 3.0.0)
CPU-Target: 64Bit

Re: Zeichnen TImage falsche Farbe bei Hintergrundbild

Beitrag von vazili_Zaitzef »

Danke, das sieht doch gut aus.
Werde ich in meinem Urlaub mal ausprobieren :)
Bin mal gespannt was so geht :)
:mrgreen:

Antworten