![]() |
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)... |
Re: Flexible Form von Windowskomponenten
du musst die region ,mit CreatePolygonRgn oder CreatePolyPolygonRgn erzeugen.
|
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"!
|
Re: Flexible Form von Windowskomponenten
Sollte doch mit
Delphi-Quellcode:
funktionieren oder lieg ich da falsch?
SetWindowRgn
|
Re: Flexible Form von Windowskomponenten
Delphi-Quellcode:
wie der Sir schon beschrieben hat. :mrgreen:
if region <> 0 then
setWindowRgn(Handle, region, true); |
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*) |
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 |
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?! |
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). |
Re: Flexible Form von Windowskomponenten
Zitat:
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:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz