AGB  ·  Datenschutz  ·  Impressum  







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

Regionen, Rahmen und Schatten

Ein Thema von stahli · begonnen am 3. Jun 2015 · letzter Beitrag vom 7. Jun 2015
 
Benutzerbild von stahli
stahli

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

Regionen, Rahmen und Schatten

  Alt 3. Jun 2015, 23:56
Ich bastle an eigenen Controls. Solange das nur Rechtecke waren, war das alles recht gut zu lösen.

Nun habe ich Page-Controls, die unregelmäßig sind. Im Bild mal 10 hintereinander und etwas versetzt.
Man erkennt, dass die Controls aus Regionen bestehen und oben solche "Laschen" haben.
Neben den Laschen sind sie sowohl transparent als auch für die Maus nicht erfassbar.

So weit so gut.

Ich habe nun zwei Fragen:

1) Wenn ich für den Rahmen ein Polygon definiere und dieses Polygon dann auch mit CreatePolygonRgn benutze, um den Zeichenbereich zu begrenzen, dann werden die rechts und unten positionierten Rahmenlinien nicht mehr gezeichnet.
Daher habe ich das Polygon für die Region nach Rechts und unten um 1 Pixel vergrößert.

Delphi-Quellcode:
  SetLength(fPolygonF, 8);
  SetLength(fPolygonR, 8);

  PolygonF[0] := Point(ClientRect.Left, ClientRect.Top + 24);
  PolygonF[1] := Point(ClientRect.Left + RL, ClientRect.Top + 24);
  PolygonF[2] := Point(ClientRect.Left + RL, ClientRect.Top);
  PolygonF[3] := Point(ClientRect.Left + (RL + RW), ClientRect.Top);
  PolygonF[4] := Point(ClientRect.Left + (RL + RW), ClientRect.Top + 24);
  PolygonF[5] := Point(ClientRect.Right, ClientRect.Top + 24);
  PolygonF[6] := Point(ClientRect.Right, ClientRect.Bottom);
  PolygonF[7] := Point(ClientRect.Left, ClientRect.Bottom);

  PolygonR[0] := Point(ClientRect.Left, ClientRect.Top + 24);
  PolygonR[1] := Point(ClientRect.Left + RL, ClientRect.Top + 24);
  PolygonR[2] := Point(ClientRect.Left + RL, ClientRect.Top);
  PolygonR[3] := Point(ClientRect.Left + (RL + RW) + 1, ClientRect.Top);
  PolygonR[4] := Point(ClientRect.Left + (RL + RW) + 1, ClientRect.Top + 24);
  PolygonR[5] := Point(ClientRect.Right + 1, ClientRect.Top + 24);
  PolygonR[6] := Point(ClientRect.Right + 1, ClientRect.Bottom + 1);
  PolygonR[7] := Point(ClientRect.Left, ClientRect.Bottom + 1);
Für den Zweck ist das ja noch ok, aber kann man das irgendwie automatisieren?
Man könnte ja auch mal ein unregelmäßiges (z.B. sternförmiges mit schrägen und vielen Zacken) Polygon haben.

Gibt es eine Funktion, die ein Polygon nach rechts und unten um 1 Pixel vergrößert?
Man müsste ja erst einmal erkennen, welche Linien rechts oder unten liegen.


2) Den Controls habe ich auf Wunsch Schatten zugewiesen.
Jetzt wird der Schatten natürlich rechts am ClientRect des Controls gezeichnet.
(Der Schatten wird natürlich außerhalb des ControlRects gezeichnet, da er ja nicht zum Control gehört.)
Nun ist der Schatten neben dem freigestellten Bereich natürlich unsinnig und sollte dafür neben der Lasche oben gezeichnet werden.

Ich könnte das natürlich als Sonderfall für das Control explizit regeln, aber gibt es vielleicht eine günstige generelle Lösung?

Auch hier müsste (wie bei Punkt 1) ermittelt werden, welche Kanten (rechts und unten) einen Schatten werfen müssen.


Natürlich will ich hier keine 3D-Graphicengine bauen.
Ein Ausstanzen unregelmäßiger Polygone mit sichtbarem Rahmen und einem kleinen Schatten wäre völlig ausreichend.


Hat jemand Ideen dazu?


Edit: ich habe eine idee. Schreibe später weiter.
Angehängte Grafiken
Dateityp: png pc.png (8,2 KB, 105x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 4. Jun 2015 um 00:33 Uhr)
  Mit Zitat antworten Zitat
 


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 05:39 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