Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Flexible Form von Windowskomponenten (https://www.delphipraxis.net/22228-flexible-form-von-windowskomponenten.html)

Silenoz84 14. Mai 2004 14:35


Flexible Form von Windowskomponenten
 
Hey LeutZ,

also das mit der flexiblen Form eines Windowsfensters (nicht dieses typisch rechteckige langweilige Design) hab ich ja inzwischen hinbekommen, allerdings wäre es jetz noch super praktisch, wenn ich das auch noch mit allen anderen Objekten, haupsächlich grafikdarstellende Komponenten wie ImageBox oder PaintBox, aber auch gruppierenden Objekten wie Panel oder GroupBox, anstellen könnte (nieder mit den Standarts, viva la revolution :wink:

D.h. die Grenzen von z.B. ner Imagebox sind nicht durch'n Rechteck definiert sondern durch en Polygon oder nem Kreis usw. Hab das schon mit der API Funktion SetWindowRgn probiert und ne Region an das Handle des Canvas dieser Objekte übergeben, das hat die entsprechenden Objekte aber herzlich wenig gebockt, sprich es ist gar nix passiert!

Irgendjemand ne Idee wie ich das anstelle???

*greetZ* Sile


P.S.: Ich war mir nicht sicher ob das jetzt in die VCL Kategorie oder doch in die API gehört... also wenn ich da jetz was falsch gemacht habe (@Admins) bitte ich um Verzeihung, verschiebt dementsprechend einfach den Thread (wenn das möglich ist)...

kiar 14. Mai 2004 15:23

Re: Flexible Form von Windowskomponenten
 
du musst die region ,mit CreatePolygonRgn oder CreatePolyPolygonRgn erzeugen.

Silenoz84 14. Mai 2004 15:32

Re: Flexible Form von Windowskomponenten
 
Jep, damit erstellt man eine Region... meine Frage war aber wie ich besagte Region an ne Komponente übergebe, um ihr eine neue, schmucke Form zu verpassen - wider diesem 0815-standart "rechteck-flair"!

SirThornberry 14. Mai 2004 15:47

Re: Flexible Form von Windowskomponenten
 
Sollte doch mit
Delphi-Quellcode:
SetWindowRgn
funktionieren oder lieg ich da falsch?

kiar 14. Mai 2004 16:03

Re: Flexible Form von Windowskomponenten
 
Delphi-Quellcode:
if region <> 0 then
  setWindowRgn(Handle, region, true);
wie der Sir schon beschrieben hat. :mrgreen:

Silenoz84 14. Mai 2004 16:36

Re: Flexible Form von Windowskomponenten
 
Ok ok... is ja in ordnung, habt ja zum teil recht is nur so, das ne PaintBox und en Image nicht direkt ein eigenes Handle haben (irgendwo ja logisch) und man da über das Canvas dran muss...
aaaaaaaaaaber wenn ich das nun mache (also mit ner PaintBox und ner gezeichneten Grafik drinne) klappt garnix und ich habe irgendwie das Gefühl Delphi lacht mich deswegen aus (entschuldigt meine subtile Paranoia, verdammtes Delphi *fluch*)

Also so sieht meine Codezeile aus:

Code:
...
var region: THandle;
begin
   region:= CreateEllipticRgn(0,0,100,100); //irgendne Region (is ja wurscht erstmal)

   setWindowRgn(pbxArea.Canvas.handle, region, true);
...

//edit: hatte das SetWindowRgn vorher nicht mit z.B. ner GroupBox ausprobiert, aber damit klappt des aufjedenfall... also werde ich dann evt. über den Umweg gehen (nur wenn alle Stricke reißen), dass ich einfach ne Paintbox in nem Panel mit der entsprechenden Region dastelle (wäre aber sehr sehr sehr unelegant *schüttel*)

Tryer 14. Mai 2004 17:44

Re: Flexible Form von Windowskomponenten
 
Die ID eines Device-Context (HDC) ist halt nunmal kein Fensterhandle (HWND), daher kann die Funktion SetWindowRgn() auch nichts mit "Canvas.Handle" anfangen.
Ein "Handle" im allgemeinen ist halt nur ein "Griff", innerhalb einer Liste aller Device-Contexte oder innerhalb einer Liste aller Fenster halt eine eindeutige ID um das gewünschte Objekt zu identifizieren und mit ihm zu arbeiten. Alle Handles werden halt als 32Bit-Wert gespeichert, dadurch entsteht der Eindruck vermeindlicher Kompatibilität.

Wenn Du nicht alle Controls die von TGaphicControl stammen und ohne Windowhandle daherkommen nochmal ableiten und deren Paint-/Mousehandler überschrieben willst dann ist wohl die Lösung mit dem Panel der einzig akzeptable Weg.

MfG,
Tryer

Silenoz84 14. Mai 2004 17:57

Re: Flexible Form von Windowskomponenten
 
Und wieder mal danke :)

Aber hast recht hab echt kein Bock alle entsprechenden Komponenten neu abzuleiten... da geh ich halt den Weg übers Panel (ich werd's einfach keinem verraten, so bleibt mir Spot und Hohn erspart *g*).

Hab aber noch nich so janz jeblickt wat das denn damit auf sich hat, dass nich alle Komponenten en Handle haben, weil wie du schon gesagt hast und wie ich mal in nem Tutorial von Luckie(?) gelesen habe, sind Handles ne Art eindeutige Adresse von Objekten, die Windows braucht um zwischen selbigen hin und her zu managen?!

Tryer 14. Mai 2004 18:02

Re: Flexible Form von Windowskomponenten
 
Gehst Du zum Glaser, drückst ihm nen Drucker in die Hand und sagst "Mach mir da nen Aquarium raus, hat ja die gleiche Seriennummer wie die Glasscheibe dahinten also muss das gehen" ?

Handles die vom System verwaltet werden haben nur die Objekte bei denen das System sich über mehrere Poszesse hinweg um lle kümmern muss, z.B. Dateien (wegen dem Festplattenzugriff) oder Fenster (um Regionen auf dem Bildschirm und Botschaften zu verwalten).

Silenoz84 14. Mai 2004 19:04

Re: Flexible Form von Windowskomponenten
 
Zitat:

Gehst Du zum Glaser, drückst ihm nen Drucker in die Hand und sagst "Mach mir da nen Aquarium raus, hat ja die gleiche Seriennummer wie die Glasscheibe dahinten also muss das gehen" ?
Sehr schöne und treffende Analogie :roteyes: :wink:

Hab's zwar immer noch nicht so wirklich verstanden, aber is auch nicht Aufgabe dieses Threads, das Thema komplett zu durschauen übersteigt wohl sowieso bei weitem meinen Horizont :freak:

Naja egal, hauptsache ich kann irgednwie mit umgehen...

also *thx & greetZ* Sile


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