AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Für CopyRect passendes Ereignis?
Thema durchsuchen
Ansicht
Themen-Optionen

Für CopyRect passendes Ereignis?

Ein Thema von OrNEC · begonnen am 24. Jan 2016 · letzter Beitrag vom 27. Jan 2016
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Für CopyRect passendes Ereignis?

  Alt 24. Jan 2016, 21:45
In der Regel erfolgt das Malen im OnPaint Event.

Wenn man jetzt im OnPaint des MainBackgroundImages ein SpectrumBackgroundImage.Invalidate aufruft, sorgt man dafür, dass das neu gezeichnet wird.

Und im OnPaint des SpectrumBackgroundImage holt man sich das darunterliegende Bild.

Um die Koordinaten herauszufinden gibt es im Übrigen ClientToScreen und ScreenToClient Funktionen.
http://docwiki.embarcadero.com/Libra...ClientToScreen
(Sollte mit FPC analog funktionieren)

@Perlsau

Das Bild ist beim ersten OnShow schon geladen aber noch nicht gezeichnet, denn der Event kommt direkt vor dem Anzeigen.
Wenn man jetzt vom Canvas etwas kopiert, auf dem noch nichts gezeichnet wurde, dann kopiert man nichts
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (24. Jan 2016 um 21:51 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Für CopyRect passendes Ereignis?

  Alt 24. Jan 2016, 22:43
@Sir Rufo
Würde da nicht ein Application.ProcessMessages das Zeichnen des geladenen Bildes anstoßen? Und erst danach kopiert man.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Für CopyRect passendes Ereignis?

  Alt 24. Jan 2016, 23:09
Nicht zwangsläufig. OnShow beschreibt die Transition der Visible Eigenschaft von False nach True.

Ich bin immer skeptisch bei Application.ProcessMessages und innerhalb eines (nicht von mir definiertem) Event sowieso. Das kann eben auch nach hinten losgehen, weil sich z.B. die Implementierung auf eine bestimmte Reihenfolge velässt und man die damit etwas durcheinander bringen kann. Zudem kann die Message zum Zeichnen der Form auch erst nach dem OnShow geschickt werden, dann bringt es nichts die Nachrichten-Warteschlange abzuarbeiten.

Die VCL-Form ist gesichert komplett gezeichnet beim ersten Application.OnIdle Event nach dem Form.OnShow Event.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (24. Jan 2016 um 23:12 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Für CopyRect passendes Ereignis?

  Alt 25. Jan 2016, 01:33
Der sauberste Weg wäre es in dem Fall doch, das Bitmap nicht über den Form-Designer zu laden, sondern es selbst in eine Ressource zu packen. Dann hat man den Ladezeitpunkt definitiv in der Hand, kann das im OnCreate erledigen, und direkt danach gut leserlich und nachvollziehbar die Kopie machen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Für CopyRect passendes Ereignis?

  Alt 25. Jan 2016, 10:32
Der sauberste Weg wäre es in dem Fall doch, das Bitmap nicht über den Form-Designer zu laden, sondern es selbst in eine Ressource zu packen. Dann hat man den Ladezeitpunkt definitiv in der Hand, kann das im OnCreate erledigen, und direkt danach gut leserlich und nachvollziehbar die Kopie machen.
Werden die Ressourcen in die MeineAnwendung.exe gepackt, oder muss man die Bilder separat im Verzeichnis mitliefern?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Für CopyRect passendes Ereignis?

  Alt 25. Jan 2016, 11:33
Im Kompilat gibt es einen eigenen Ressourcen-Abschnitt, darin landen u.a. alle eingebundenen Bilder. Du musst sie also nicht extern mitliefern.
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
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Für CopyRect passendes Ereignis?

  Alt 25. Jan 2016, 13:41
Der sauberste Weg wäre es in dem Fall doch, das Bitmap nicht über den Form-Designer zu laden, sondern es selbst in eine Ressource zu packen. Dann hat man den Ladezeitpunkt definitiv in der Hand, kann das im OnCreate erledigen, und direkt danach gut leserlich und nachvollziehbar die Kopie machen.
Klappt auch nicht. Mit dem Klick auf den Button schon...
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  Quelle, Ziel: TRect;
begin
  Image1.Picture.LoadFromLazarusResource('bg');
  Image2.Picture.LoadFromLazarusResource('5ge');

  Quelle := Rect(0, 0, 100, 100);
  Ziel := Rect(0, 0, 100, 100);
  Image2.Canvas.CopyRect(Ziel, Image1.Canvas, Quelle);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Quelle, Ziel: TRect;
begin
  Quelle := Rect(0, 0, 100, 100);
  Ziel := Rect(0, 0, 100, 100);
  Image2.Canvas.CopyRect(Ziel, Image1.Canvas, Quelle);
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Für CopyRect passendes Ereignis?

  Alt 25. Jan 2016, 13:45
Was passiert denn, wenn Du auf den Button klickst und anschließend mal ein anderes Fenster über Deins legst?
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
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Für CopyRect passendes Ereignis?

  Alt 25. Jan 2016, 13:53
Was passiert denn, wenn Du auf den Button klickst und anschließend mal ein anderes Fenster über Deins legst?
Passiert nichts, das andere Fenster hat keinen Einfluss auf mein Fenster.
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:02 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