Wie arbeitet PaintTo?
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Wie arbeitet PaintTo?
Hallo Winni,
sehr seltsam. Ich habe es eben noch mal mit genau dem gepostetet Beispiel getestet und habe das gleiche verhalten wie von mir beschrieben. Ich hänge jetzt mal die .exe an. Vielleicht kannst du die mal bei Gelegenheit testen, ob die bei dir läuft. Bei mir geht sie unter XP und Win10 nicht!
Vielen Dank und viele Grüße
Bernd
sehr seltsam. Ich habe es eben noch mal mit genau dem gepostetet Beispiel getestet und habe das gleiche verhalten wie von mir beschrieben. Ich hänge jetzt mal die .exe an. Vielleicht kannst du die mal bei Gelegenheit testen, ob die bei dir läuft. Bei mir geht sie unter XP und Win10 nicht!
Vielen Dank und viele Grüße
Bernd
- Dateianhänge
-
projectTest1.zip
- (711.48 KiB) 128-mal heruntergeladen
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Wie arbeitet PaintTo?
Geht bei mir auch nicht.
Aber wenn ich "Panel1.ParentColor:=False;" setze dann funktioniert es.
Aber wenn ich "Panel1.ParentColor:=False;" setze dann funktioniert es.
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Wie arbeitet PaintTo?
Komisch, wenn man Panel1.ParentColor auf True setzt aber Panel1.Color auf clBtnFace setzt dann gehts auch.
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Wie arbeitet PaintTo?
Hi!
Was hast Du denn für einen Bug entdeckt???
Test, test, test Deiner exe:
* Unter Wine funktioniert das einwandfrei
* Unter Win7/64 funktioniert garnix
Ich hab ja schon immer gesagt, dass Wine das bessere Windows ist ...
Merkwürdig, merkwürdig ...
Winni
Was hast Du denn für einen Bug entdeckt???
Test, test, test Deiner exe:
* Unter Wine funktioniert das einwandfrei
* Unter Win7/64 funktioniert garnix
Ich hab ja schon immer gesagt, dass Wine das bessere Windows ist ...
Merkwürdig, merkwürdig ...
Winni
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Wie arbeitet PaintTo?
Das Problem scheint aus der PaintTo Procedure zu kommen. Wenn man die Zeile mit PaintTo auskommentiert dann zeichnet "Canvas.Draw" ein schwarzes Rechteck. Oder es hängt mit der Transparenz zusammen.
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Wie arbeitet PaintTo?
Also, das ist wirklich komisch ich habe mal das "PaintTo" in den Sourcen verfolgt (2.0.8 + 3.0.4).
PaintTo -> Controls.pp (Zeile 2342) -> Zeile 3592 -> {$I wincontrol.inc} -> 5069 -> 5063 -> 5066 ->
WSControls.pp (Zeile 347).
Und diese procedure ist leer?
PaintTo -> Controls.pp (Zeile 2342) -> Zeile 3592 -> {$I wincontrol.inc} -> 5069 -> 5063 -> 5066 ->
WSControls.pp (Zeile 347).
Und diese procedure ist leer?
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Wie arbeitet PaintTo?
Hallo,
vielen Dank an euch beide für das Testen. Bedeutet dann wohl es liegt nicht daran das ich PaintTo falsch verwende. Aber ob es ein Bug ist? Ich habe leider sehr wenig Erklärung zu PaintTo im Netz gefunden.
Hab es übrigens auch mit Lazarus 2.0.8 r62944 FPC 3.0.4 i386-win32-win32/win64 kompiliert.
Viele Grüße
Bernd
vielen Dank an euch beide für das Testen. Bedeutet dann wohl es liegt nicht daran das ich PaintTo falsch verwende. Aber ob es ein Bug ist? Ich habe leider sehr wenig Erklärung zu PaintTo im Netz gefunden.
Hab es übrigens auch mit Lazarus 2.0.8 r62944 FPC 3.0.4 i386-win32-win32/win64 kompiliert.
Viele Grüße
Bernd
- kupferstecher
- Beiträge: 431
- Registriert: Do 17. Nov 2016, 11:52
Re: Wie arbeitet PaintTo?
Habs auch mal getestet und kann das Problem bestätigen:
Bei gesetztem ParentColor wird nur der Hintergrund kopiert (zumindest nicht schwarz).
Lazarus 2.0.6 unter Win7 Pro, 64 bit.
Bei gesetztem ParentColor wird nur der Hintergrund kopiert (zumindest nicht schwarz).
Lazarus 2.0.6 unter Win7 Pro, 64 bit.
Das ist eine virtuelle Methode, die durch das passende Widgetset dann überladen wird. Du musst also in der Widgetset-Datei für Windows (win32wscontrols.pp) nach der PaintTo-Methode suchen.sstvmaster hat geschrieben: Sa 4. Jul 2020, 12:53 Also, das ist wirklich komisch ich habe mal das "PaintTo" in den Sourcen verfolgt (2.0.8 + 3.0.4).
[...]
Und diese procedure ist leer?
-
- Beiträge: 607
- Registriert: Di 19. Mai 2015, 20:05
- OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
- CPU-Target: x86_64-linux-gtk2
Re: Wie arbeitet PaintTo?
Hallo,
ich hab das nun mal verfolgt. Und das gefunden:
Ich bin aber leider weit davon entfernt zu erkennen ob nun hier ein Bug von Lazarus vorliegt oder ob das einfach von Windows so vorgegeben ist? Oder ob es sich aus irgend einem Grund genauso verhalten soll?
Viele Grüße
Bernd
ich hab das nun mal verfolgt. Und das gefunden:
Code: Alles auswählen
class procedure TWin32WSWinControl.PaintTo(const AWinControl: TWinControl;
ADC: HDC; X, Y: Integer);
var
SavedDC: Integer;
begin
SavedDC := SaveDC(ADC);
MoveWindowOrgEx(ADC, X, Y);
SendMessage(AWinControl.Handle, WM_PRINT, WParam(ADC),
PRF_CHECKVISIBLE or PRF_CHILDREN or PRF_CLIENT or PRF_NONCLIENT or PRF_OWNED);
RestoreDC(ADC, SavedDC);
end;
Viele Grüße
Bernd
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: Wie arbeitet PaintTo?
Habe hier auch was ähnliches gefunden: https://stackoverflow.com/questions/438 ... r-wm-print, Winni hat ja geschrieben das es unter Wine funktioniert. Im Link im 6. Eintrag schreibt er ja auch das es in Wine ganz anders implementiert wurde.
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)