Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Panels (https://www.delphipraxis.net/90579-panels.html)

ConTaCt 19. Apr 2007 22:44


Panels
 
hi


ich hab hier mal etwas programmiert wo man panels braucht!

meine frage ist nur, da ich diese rund haben will!

Wie macht man Panels rund????

Sunlight7 20. Apr 2007 00:53

Re: Panels
 
Moin!

MSDN-Library durchsuchenCreateRoundRectRGN und dann MSDN-Library durchsuchenSetWindowRGN, mehr dazu: Hier im Forum suchenSetWindowRGN

Aike 20. Apr 2007 09:23

Re: Panels
 
Hah, das ist ja witzig. Sowas hab ich schon lange gesucht und dann mit einem TShape realisiert. Wenn ich mir die Lösung ansehe mit CreateRoundRectRGN ist das ja viel cooler.

Ein Beispiel mit dem Panel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a:hrgn;
begin
  Form1.Color:=clOlive; //Farbig, damit man den Unterschied sieht
  Panel1.Color:=clTeal;
  a:=CreateRoundRectRgn(0,0,90,90,20,20);
  setwindowrgn(panel1.Handle,a,true);
end;

turboPASCAL 20. Apr 2007 17:13

Re: Panels
 
Bitte das Freigeben der Region(en) nicht vergessen da es Speicher belegt! Delphi-Referenz durchsuchenDeleteObject

Delphi-Quellcode:
var rgn: hrgn;

procedure TForm1.FormCreate(Sender: TObject);
begin
  rgn := CreateRoundRectRgn(0,0, panel1.Width, panel1.Height, 20, 20);
  SetWindowRgn(panel1.Handle, rgn, TRUE);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DeleteObject(rgn);
end;

Hawkeye219 20. Apr 2007 17:49

Re: Panels
 
Hallo Matti,

Zitat:

Bitte das Freigeben der Region(en) nicht vergessen
normalerweise ja, in diesem Fall aber nicht:

Zitat:

Zitat von Microsoft PSDK
After a successful call to SetWindowRgn, the system owns the region specified by the region handle hRgn. The system does not make a copy of the region. Thus, you should not make any further function calls with this region handle. In particular, do not delete this region handle. The system deletes the region handle when it no longer needed.

Gruß Hawkeye

turboPASCAL 20. Apr 2007 18:13

Re: Panels
 
Ich habe feststellen müssen das dem nicht immer so ist.
Im meiner D6 Hilfe steht das nicht im MSDN aber schon. :gruebel:

Allerdings find ich es sauberer so... Hatt Du wat Created denn mach's och wieder free. :mrgreen:

Hawkeye219 20. Apr 2007 18:58

Re: Panels
 
Hast du den Rückgabewert von DeleteObject schon einmal überprüft? Raymond Chen zitiert in einer Antwort ebenfalls das PSDK - und der sollte es eigentlich wissen.

Gruß Hawkeye

Sunlight7 20. Apr 2007 19:58

Re: Panels
 
Zitat:

Zitat von turboPASCAL
Ich habe feststellen müssen das dem nicht immer so ist.
Im meiner D6 Hilfe steht das nicht im MSDN aber schon. :gruebel:

Allerdings find ich es sauberer so... Hatt Du wat Created denn mach's och wieder free. :mrgreen:

Das steht in meiner D2, D5 und C++ Hilfe so drin, das man die Finger weg tun soll.
Nur in der D1 Hilfe stehts nicht, wenn ich bloß wüste warum :angel2: :mrgreen:

Ich habe mal die Erfahrung gemacht, das sich das Programm nach einiger Zeit aufhängte, wenn man regelmäßig die Regions ändert und diese löscht...

Aike 21. Apr 2007 07:22

Re: Panels
 
Echt witzig, über was für abgefahrene Dinge ihr diskutiert bei solch simplen Fragen :dp:

turboPASCAL 21. Apr 2007 15:07

Re: Panels
 
Zitat:

Zitat von Aike
Echt witzig, über was für abgefahrene Dinge ihr diskutiert bei solch simplen Fragen :dp:

Äh, weil es bei vielen "modernen" Programieren nicht mehr in den Sinn kommt ein Programm
so zu Bauen das es sein reservierten Speicher für ... wieder frei gibt oder die Bitmaps
für ein ... alle 2 min neu von der Festplatte zu laden.

Nein, das gehört schon dazu. :mrgreen:


Zitat:

Zitat von Sunlight7
... Ich habe mal die Erfahrung gemacht, das sich das Programm nach einiger Zeit aufhängte, wenn man regelmäßig die Regions ändert und diese löscht...

Japp, so ist es auch mir ergangen. Ich lösche die Region nur noch zum Programende.
Das liegt aber, so glaube ich am Betriebssystem.


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