Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Für CopyRect passendes Ereignis? (https://www.delphipraxis.net/188019-fuer-copyrect-passendes-ereignis.html)

OrNEC 26. Jan 2016 10:28

AW: Für CopyRect passendes Ereignis?
 
@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...

Medium 26. Jan 2016 16:03

AW: Für CopyRect passendes Ereignis?
 
Wobei ist das Problem mit dem Laden aus einer Ressource?

OrNEC 26. Jan 2016 17:28

AW: Für CopyRect passendes Ereignis?
 
Zitat:

Zitat von Medium (Beitrag 1328307)
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.

himitsu 26. Jan 2016 22:42

AW: Für CopyRect passendes Ereignis?
 
Zitat:

Zitat von OrNEC (Beitrag 1328315)
ich meine die CopyRect funkt nicht.

Eher unwahrscheinlich.
Bleibt also zu 99,9995% ein Fehler in deinem Code. :stupid:

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. :roll:

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.

OrNEC 27. Jan 2016 09:51

AW: Für CopyRect passendes Ereignis?
 
Zitat:

Zitat von Luckie (Beitrag 1328174)
Guck mal hier http://www.delphigroups.info/2/71/97729.html letzter Beitrag.


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.

himitsu 27. Jan 2016 12:00

AW: Für CopyRect passendes Ereignis?
 
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)

Zitat:

Zitat von himitsu (Beitrag 1328339)
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. :roll:

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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Seite 3 von 3     123   

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