AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ClipRgnTest

Ein Thema von stahli · begonnen am 19. Apr 2023 · letzter Beitrag vom 20. Apr 2023
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#1

ClipRgnTest

  Alt 19. Apr 2023, 21:17
Ich habe ein kleines Testprojekt für SelectClipRgn & Co. erstellt.

Falls jemand das mal hilft, hier als Anlage...
Miniaturansicht angehängter Grafiken
19-04-2023_22-11-39.png  
Angehängte Dateien
Dateityp: zip ClipRgnTest.zip (3,40 MB, 1x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ClipRgnTest

  Alt 19. Apr 2023, 22:44
Ich muss gleich mal nachfragen...

Warum wird lRgn3 im geänderten Beispiel nicht zugewiesen?
Ich möchte die aktuelle Clipping-Region sichern und diese später wieder herstellen.

Die aktuelle Clipping-Region wird ja innerhalb von ExtSelectClipRgn verarbeitet.
Genau diese möchte ich in einer Region speichern und dachte, dafür wäre GetClipRgn da...?

Delphi-Quellcode:
  procedure TForm1.FormActivate(Sender: TObject);
  var
    lRect : TRect;
    lRgn1, lRgn2, lRgn3: Cardinal;
  begin
    lRgn1 := 0;
    lRgn2 := 0;
    lRgn3 := 0;

    Canvas.FillRect(ClientRect);

    lRect := TRect.Create(100, 100, 200, 200);
    Canvas.Brush.Color := clYellow;
    Canvas.FillRect(lRect);

    lRect := TRect.Create(200, 200, 300, 300);
    Canvas.Brush.Color := clBlue;
    Canvas.FillRect(lRect);

    lRgn1 := CreateRectRgn(150, 150, 250, 250);
    SelectClipRgn(Canvas.Handle, lRgn1);
    GetClipRgn(Canvas.Handle, lRgn3); // tmp
    Canvas.Brush.Color := clGreen;
    Canvas.FillRect(ClientRect);
    GetClipRgn(Canvas.Handle, lRgn3); // tmp

    lRgn2 := CreateRectRgn(160, 160, 260, 260);
    ExtSelectClipRgn(Canvas.Handle, lRgn2, RGN_OR);
    Canvas.Brush.Color := clRed;
    Canvas.FillRect(ClientRect);

    GetClipRgn(Canvas.Handle, lRgn3); // <-- Warum wird lRgn3 nicht die aktuelle Clip-Region des Canvas zugewiesen?

    lRgn2 := CreateRectRgn(16, 16, 26, 26);
    SelectClipRgn(Canvas.Handle, lRgn2);
    Canvas.Brush.Color := clTeal;
    Canvas.FillRect(ClientRect);

    SelectClipRgn(Canvas.Handle, lRgn3); // <-- Hier sollte die gesicherte Clip-Region wieder asgewählt werden!
    Canvas.Brush.Color := clNavy;
    Canvas.FillRect(ClientRect);

    DeleteObject(lRgn1);
    DeleteObject(lRgn2);

    SelectClipRgn(Canvas.Handle, HRGN(nil));

    Canvas.Brush.Color := clBtnFace;
    Canvas.FillRect(ClientRect);
  end;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ClipRgnTest

  Alt 19. Apr 2023, 23:43
Nja, erstmal könnte man vielleicht auf die irrsinnige Idee kommen und die Rückgabewerte der Prozeduren Funktionen prüfen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
114 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: ClipRgnTest

  Alt 20. Apr 2023, 04:52
Zitat:
Code:
    GetClipRgn(Canvas.Handle, lRgn3); // <-- Warum wird lRgn3 nicht die aktuelle Clip-Region des Canvas zugewiesen?
lRgn3 muss ein handle zu einer schon gültigen region sein. Also davor einfach
Code:
lRgn3:=CreateRectRgn(irgendwas)
dann ist der Rückgabewert von GetClipRgn 1, und das weitere funktioniert.

Renate
Renate
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: ClipRgnTest

  Alt 20. Apr 2023, 06:22
Renate, vielen Dank!
Das funktioniert perfekt.

Ich hatte nirgendwo einen entsprechenden Hinweis gefunden..
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: ClipRgnTest

  Alt 20. Apr 2023, 11:55
Ich hatte nirgendwo einen entsprechenden Hinweis gefunden..
Dann hast Du wahrscheinlich nicht die Api Beschreibung zu GetClipRgn gelesen

Zitat:
A handle to an existing region before the function is called. After the function returns, this parameter is a handle to a copy of the current clipping region.
Auch wäre es Ratsam das Resultat auszuwerten wie Renate es sagt um schneller zu ermitteln warum etwas nicht funktioniert.
Zitat:
If the function succeeds and there is no clipping region for the given device context, the return value is zero. If the function succeeds and there is a clipping region for the given device context, the return value is 1. If an error occurs, the return value is -1.
Gruß vom KodeZwerg
  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 02:11 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