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
Seite 3 von 3     123   
OrNEC

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

AW: Für CopyRect passendes Ereignis?

  Alt 26. Jan 2016, 11:28
@Perlsau danke Dir... Application.OnIdle Event war mir noch nicht vertraut.

An sich funktioniert es auch, die ShowMessage wird ausgegeben, aber das Bild wird nicht kopiert.

Ich würde für noch ein Paar Ideen sehr dankbar...
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#22

AW: Für CopyRect passendes Ereignis?

  Alt 26. Jan 2016, 17:03
Wobei ist das Problem mit dem Laden aus einer Ressource?
"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
 
#23

AW: Für CopyRect passendes Ereignis?

  Alt 26. Jan 2016, 18:28
Wobei ist das Problem mit dem Laden aus einer Ressource?
Ich glaube nicht, die Bilder werden schön geladen und angezeigt, aber nicht kopiert, ich meine die CopyRect funkt nicht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Für CopyRect passendes Ereignis?

  Alt 26. Jan 2016, 23:42
ich meine die CopyRect funkt nicht.
Eher unwahrscheinlich.
Bleibt also zu 99,9995% ein Fehler in deinem Code.

Image.Canvas ist die "sichtbare" Zeichenfläche und Image.Picture.Canvas?, Image.Picture.Graphics.Canvas oder z.B. Image.Picture.Bitmap.Canvas ist der Canvas des internen Bildes.
PS: Rate mal was TImage mit dem Canvas der Oberfläche macht, wenn es das WM_PAINT bekommt.

In neueren Windowsen hat man zwar oft den Vorteil, daß sich der DesktopWindowManager (DWM) dazwischen klemmt, aber normaler Weise ist der Canvas des Fensters (und allem darauf) flüchtig.
$2B or not $2B

Geändert von himitsu (26. Jan 2016 um 23:48 Uhr)
  Mit Zitat antworten Zitat
OrNEC

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

AW: Für CopyRect passendes Ereignis?

  Alt 27. Jan 2016, 10:51

Hier wird nicht das Image1 kopiert, sondern der Desktop noch bevor meine Anwendung starten. Kann also nach dem Start im Image2 die Icons sehen die auf meinem Desktop liegen.


Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Windows;

const
  MY_MESSAGE = WM_USER + 1;

type

  { TForm1 }

  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { private declarations }
    procedure MyMessage(Var MSG: TMessage); message MY_MESSAGE;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormShow(Sender: TObject);
begin
  PostMessage(Self.Handle, MY_MESSAGE, 0, 0);
end;

procedure TForm1.MyMessage(var MSG: TMessage);
var
  Quelle, Ziel: TRect;
begin
  Label1.Caption := 'Luluu';
  Quelle := Classes.Rect(0, 0, 100, 100);
  Ziel := Classes.Rect(0, 0, 100, 100);
  Image2.Canvas.CopyRect(Ziel, Image1.Canvas, Quelle);
end;


end.

Geändert von OrNEC (27. Jan 2016 um 11:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Für CopyRect passendes Ereignis?

  Alt 27. Jan 2016, 13:00
NOCHMAL zum MITLESEN.

Das Ändern des Labels löst ein Neuzeichnen dessen Canvas aus (TLabel und TImage haben aber kein eigenes Canvas, sondern leiten die Operationen an ihren Parent weiter)
Fazit: Die Form wird neu gezeichnet und schmeißt die Zeichenausgabe deines FEHLERHAFTEN Codes weg. (übermalt das wieder)

Label1.Caption:=... zeichnet nicht sofort, sondern verzögert, also nach deinem Code. (quasi PostMessage WM_PAINT)

Image.Canvas ist die "sichtbare" Zeichenfläche und Image.Picture.Canvas?, Image.Picture.Graphics.Canvas oder z.B. Image.Picture.Bitmap.Canvas ist der Canvas des internen Bildes.
PS: Rate mal was TImage mit dem Canvas der Oberfläche macht, wenn es das WM_PAINT bekommt.

In neueren Windowsen hat man zwar oft den Vorteil, daß sich der DesktopWindowManager (DWM) dazwischen klemmt, aber normaler Weise ist der Canvas des Fensters (und allem darauf) flüchtig.
CopyRect funktioniert, aber du vergisst bei einem Repaint der Form deine Ausgabe wieder herzustellen, bzw. du arbeitest auf der falschen Arbeitsfläche!
$2B or not $2B

Geändert von himitsu (27. Jan 2016 um 13:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 18:22 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