TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von mintpc »

Hallo zusammen,

ich hab nun schon einige Zeit im Lazarus-Buch rumgesucht und glaube mittlerweile, dass es für mein
Problem keine wirklich gute Lösung gibt, oder doch?

Ich habe ein "TImage" und mittendrin ein kleineres zentriertes Bild (siehe Anhang).
Der Rand um das Bild soll grün gefärbt werden.

Code: Alles auswählen

 Image1.Canvas.brush.Color := cllime;
Image1.Canvas.Rectangle(0,0,self.Width, self.Height); 
Allerdings verdeckt das Rechteck auch das Bild, das irgendwie wieder in den Vordergrund müsste (auch Anhang).

Ich könnte einfach um das Bild herum 4 "Rand"-Rechteckes setzen und den Platz für das Bild in der
Mitte aussparen. Allerdings finde ich diese Lösung nicht besonders elegant.

Gibt es überhaupt eine Lösung für dieses Problem mit der "TImage"-Komponente?

Viele Dank schonmal
mintpc
Dateianhänge
Form mit Image und Bild
Form mit Image und Bild
BeispielImage.bmp (148.12 KiB) 1479 mal betrachtet
grün verdeckt
grün verdeckt
BeispielImage2.bmp (98.24 KiB) 1479 mal betrachtet

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
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: TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von m.fuchs »

Einfache Lösung, ein farbiges TShape unter das TImage legen:

Bild
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von Michl »

Falls es nur für die "Ansicht" ist, funktioniert das Zeichnen mit Deinem Code bei mir, im Event OnPaint der Form (nicht Image.Paint - wird danach aufgerufen und übermalt das zentrierte Picture).

Sauberer ist imho die Lösung von M.Fuchs.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Re: TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von mintpc »

Hallo.

So, oder so ähnlich mit nem Shape hatte ich mir auch schon überlegt und werde es
wohl auch machen.

Das Ganze sollte eine grafische Animation des "Rucksack-Problems" werden
mit draufklicken und Gegenstand in den Rucksack ziehen. Die unterschiedliche
zufällige Größe der Gegenstände sollte über die Größe der Images geregelt
werden, die Bilder mittendrin als Motivation.

Mit dem Shape müssen dann zwei Objekte bewegt werden. Wird wohl aber auch
gehen.

Danke jedenfalls für die Anworten.
mintpc

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
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: TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von m.fuchs »

Erstell dein Bild doch dann gleich mit der Hintergrundfläche, dann hast du nur das TImage.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Re: TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von mintpc »

Hallo Michael,

das würde natürlich gehen, aber ich möchte (für das Rucksackproblem) viele
verschiedene Gegenstände dynamisch erzeugen und die Größe der Gegenstände
sind die Außmaße und der Wert der Gegenstände ist eine ausgedruckte Zahl auf
den Gegenständen. D.h., die Größe der Objekte wird zufällig bestimmt. Das klappt super.

Als Motivation sollen nun noch Bilder von Goldbarren oder Ringen oder Geldmünzen auf
die Gegenstände. Damit kenne ich die Größe der Bilder ja vorher nicht.


Ich werde es wohl so machen, dass die Gegenstände erzeugt werden (Tshpape oder TLabel o.ä.)
und dann setzte ich die Bilder einfach in die Mitte der Gegenstände und kann sie per

Code: Alles auswählen

procedure TForm1.Image1Paint(Sender: TObject);
begin
  image1.BringToFront;
end; 
nach vorne bringen und sichtbar machen. Das wird sicher funktionieren.

Beste Grüße
mintpc

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
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: TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von m.fuchs »

Hm, vielleicht stelle ich mir das falsch vor, aber ich würde folgendes machen:

Für jedes Motivationsbild eine PNG-Datei in der Auflösung 1000 x 1000px erstellen. Eine Hintergrundfarbe, in die Mitte zentriert das Motivationsbildchen.
Im Programm dann ein TImage erstellen mit der gewünschten Größe (also zum Beispiel mal 312 x 207px). Darein das Bild laden und Center auf True setzen.
Und so weiter und so fort.

So lange die Images nicht größer als 1000 x 1000px werden, ist alles paletti.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Re: TImage - Bild und "Hintergrundfarbe" gleichzeitig?

Beitrag von mintpc »

Hallo Michael,

saugeil. Das funktioniert! Und dann muss ich nicht mit zwei Objekten
über und untereinander herumfummeln.

Viiiiiiiiiieeeeeeelen Dank.
mintpc

Antworten