Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Fenster-Design (https://www.delphipraxis.net/111742-fenster-design.html)

64Jabor 8. Apr 2008 17:29


Fenster-Design
 
Hallo Leutz vom DP !
Ich möchte mein Formular nicht mehr schnöde als Viereck haben, sondern mal was peppiges!
In meinem Beispiel möchte ich ein Fenster, was im oberen Teil als Halbkreis, im unteren jedoch als Ellipse abgegrenz ist.
Wie man ein Formular zu einer Ellipse begrenzt ist mir klar:
Delphi-Quellcode:
procedure TJP.StartInit(Sender: TObject);
var HR: HRgn;
    i, j: integer;
begin
 HR := CreateEllipticRgn (6, 17, clientwidth, clientheight); //Ellipse zeichnen
 SetWindowRgn(Handle, HR, True); //Fenster auf Ellipse beschränken
end;
Eingentlich ganz einfach. Nur möchte ich ja jetzt mein Fenster mit zwie unterschiedlichen Formen begrenzen, der Ellipse und dem Halbkreis ... das Überlappende der beiden also! Ich versuche das mal "darzustellen"
____________________________________________#
_____________________________________#____________ __#
_______________________________#__________________ ________#
__________________________#_______________________ _____________#
_______________________#__________________________ __________________#
_____________________#____________________________ ____________________#
____________________#_____________________________ _____________________#
___________________#______________________________ ______________________#
__________________#___________Halbreis_als_Obertei l_bis_hierhin_________________#
_____________________#____________________________ ____________________#
_________________________#________________________ ________________#
__________________________________#_______________ _______#
____________________________________________#_Elli psenförmiger_Unterteil

Hat da jemand ne Idee?
Thx schonmal!

shmia 8. Apr 2008 17:36

Re: Fenster-Design
 
Zwei Regionen erzeugen und mit
Delphi-Quellcode:
if CombineRgn(Hreg1, Hreg2, HRegOut, RGN_AND) <> RGN_ERROR then
  SetWindowRgn(Handle, HRegOut, True);
die Schnittmenge bilden.

64Jabor 8. Apr 2008 17:37

Re: Fenster-Design
 
ich danke dir...genau das was ich gesucht hab!

64Jabor 8. Apr 2008 17:55

Re: Fenster-Design
 
So jetzt habe ich es so versucht:

Delphi-Quellcode:
procedure TJP.StartInit(Sender: TObject);
var HR, HR2, HRes: HRgn;
begin
 HR := CreateEllipticRgn (6, 17, clientwidth, clientheight); //Ellipse zeichnen
 HR2 := CreateEllipticRgn (0, 0, clientwidth, clientheight); //Kreis zeichnen
 if (CombineRgn(HR, HR2, HRes, RGN_AND)) <> RGN_ERROR then SetWindowRgn(Handle, HRes, True);
 //Schnittfläche des Kreises mit der Ellipse auswählen und als Fenster setzen
end;
Leider funktioniert es nicht, aber mein Fenster ist wieder ganz normal rechteckig!
Es gab auch keinen RGN_ERROR, das habe ich via "else"-Abschnitt überprüft...

Woran kann das denn nun liegen?

mfg 64Jabor

64Jabor 8. Apr 2008 18:05

Re: Fenster-Design
 
Nee sry!
Gibt DOCH einen RGN_ERROR... -.-
Ursache ist mir jetzt jedoch nicht erklärlich ?!?

mfg 64Jabor

shmia 8. Apr 2008 18:11

Re: Fenster-Design
 
Tja, die Reihenfolge der Parameter ist falsch :roll:
Zuerst das Hres, dann erst die beiden Source Regionen.
Delphi-Quellcode:
procedure TJP.StartInit(Sender: TObject);
var HR, HR2, HRes: HRgn;
begin
HR := CreateEllipticRgn (6, 17, clientwidth, clientheight); //Ellipse zeichnen
HR2 := CreateEllipticRgn (0, 0, clientwidth, clientheight); //Kreis zeichnen
if (CombineRgn(HRes, HR, HR2, RGN_AND)) <> RGN_ERROR then SetWindowRgn(Handle, HRes, True);
//Schnittfläche des Kreises mit der Ellipse auswählen und als Fenster setzen
  DeleteObject(HRes);
  DeleteObject(HR2);
  DeleteObject(HR);
end;

Fussball-Robby 8. Apr 2008 18:13

Re: Fenster-Design
 
Und davor noch das einfügen:
Delphi-Quellcode:
HRes := CreateRectRgn(0, 0, ClientWidth, ClientHeight);

64Jabor 8. Apr 2008 18:40

Re: Fenster-Design
 
Alles klar, einen Fehler hat das ganze noch... man muss die 3 Regionen in 3 Schritten versch,elzen! erst HRes mit HR dann Hres mit HR2, dann funktioniert alles...thx an alle!

mfg 64Jabor


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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