Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Sa 20.02.16 20:03 
Hallo!

Ich möchte eine Image-Komponente als runden Drehregler nutzen. Wie ich es rund bekomme, weiss ich (HRgn, CreateEllipticRgn). Wie ich abfrage, ob nach links oder rechts "gedreht" wurde, weiss ich auch (X, Y).

Meine Frage: Wie schneide ich den Rand um den runden Bereich weg, sodass ich nicht auch noch extra abfragen muss, ob sich X,Y innerhalb bestimmter Werte befinden? Es soll dann tatsächlich nur der runde Bereich nutzbar sein!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mo 22.02.16 12:08 
Ich dachte zunächst, man kann einfach eine Shape drüberlgen, aber die gibt ebenfalls die Koordinaten, die ausserhalb des Kreises liegen zurück.

Deshalb wirst du m.E. wohl rechnen müssen. Wobei das sehr simpel ist, da du ja alle Koordinaten hast, die du benötigst und es relativ simpel ist zu checken ob diese innerhalb des Kreises liegen.

So mach ich das
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  xa := x - xMittelpunkt; 
  ya := y - xMittelpunkt;
  xa2 := xa*xa;
  ya2 := ya*ya;
  xy := ya2+xa2;
  d := sqrt(xy);
  if d < radius then    
    Innerhalb := true;


Das kannst du noch zusammenfassen, wenn du magst. xMittelpunkt ist der Mittelpunkt deines Kreises auf dem TImage. x und y sind die Koordinaten die du von Mousedown erhälst. Wenn d < des Radius deines Kreises ist, dann ist der Klick innerhalb des Kreises gewesen.

_________________
mfg. Joel

Für diesen Beitrag haben gedankt: galagher
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: Mo 22.02.16 12:47 
Hmm..

Für einen Test habe ich ein TImage auf ein Panel gelegt,
dieses mit

ausblenden Delphi-Quelltext
1:
2:
  FRgn := CreateRoundRectRgn(11, Panel2.Width, Panel2.Height, Panel2.Width, Panel2.Height);
  SetWindowRgn(Panel2.Handle, FRgn, True);


Rund gemacht, somit wird auch das TImage rund gezeichnet.

Beim OnMouseDown oder OnClick des Images wird nun nur der sichtbare Bereich als Click-Ziel verwendet.

Somit sollte dies doch dass sein, was Du haben möchtest. ;)

Für diesen Beitrag haben gedankt: galagher
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Mo 22.02.16 15:49 
Wenn du die HRGN schon hast, kannst du auch per Suche im MSDN PTINREGION überprüfen, ob der aktuelle Punkt in dieser Region ist.

Ansonsten könntest du auch eine eigene Komponente von TCustomControl ableiten, die hat dann ein Handle und du kannst das tun was user profile iconHolgerx beschreibt, da kann man dann durchklicken (im Gegensatz zum einfachen Überprüfen auf die Koordinate, wo dann einfach nichts passieren würde).

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."

Für diesen Beitrag haben gedankt: galagher
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mo 22.02.16 18:23 
Ich komme wahrscheinlich erst im Laufe der Woche dazu, das alles zu testen!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!