![]() |
Bereiche festlegen
Hi.
Ich möchte auf einem Spielfeld Bereiche festlegen. Wenn man dann auf so einen Bereich klickt, löst dieser ein Ereignis aus. Gibt es dafür irgendwelche Lösungen, oder soll ich das Spielfeld (Image) "zerschneiden", sodass die dann entstehenden kleineren Images dann diese Bereiche darstellen und bei klick auf diese dann die Ereignisse ausgelöst werden? Gruß Remake |
Re: Bereiche festlegen
Du könntest es mit Regions versuchen.
![]() Einfach die Bereiche mit CreateRectRegion() erstellen und mit PtInRegion beim Klick abfragen |
Re: Bereiche festlegen
ok, mal sehen ob ich dich richtig verstanden habe:
meinst du mit Regions einfach sowas wie Rechtecke (also CreateRectRgn())? Ich erzeuge quasi einfach rechteckige Bereiche, die aber nicht sichtbar sind. Wie kann ich bei denen dann das OnClick Ereignis ansteuern? |
Re: Bereiche festlegen
Du nimmst eine Componente mit dem Canvas Property(HDC ist hier wichtig), machst deine Regions und dann mit SelectObject machst du sie gültig. Und dann wenn ein OnXXX Ereignis mit dem Mouse ausgelöst ist, prüfst du mit PtnInRgn ob du da bist wo du es auch wolltest.
Das nur wenn du es mit dem regions machen willst. Zitat:
|
Re: Bereiche festlegen
Ein Beispiel :
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; region : HRGN; done : boolean = false; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var temp:HRGN; begin region := CreateRectRgn(100,100,400,200); temp := CreateEllipticRgn(100,100,400,200); SelectObject(canvas.Handle,region); if COMPLEXREGION <> CombineRgn(region,region,temp,RGN_DIFF)then Application.MessageBox('Geht nicht.','Fehler'); Canvas.Brush.Color := clRed; PaintRgn(canvas.Handle,region); Canvas.Brush.Color := clBlack; FrameRgn(canvas.Handle,region,canvas.Brush.Handle,1,1); done := true; end; procedure TForm1.FormPaint(Sender: TObject); begin if done then begin Canvas.Brush.Color := clRed; PaintRgn(canvas.Handle,region); Canvas.Brush.Color := clBlack; FrameRgn(canvas.Handle,region,canvas.Brush.Handle,1,1); end; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if done then if PtInRegion(region,x,y) then Label1.Caption := 'Maus ist drin.' else Label1.Caption := 'Maus ist raus.' end; |
Re: Bereiche festlegen
So, jetzt hab ich endlich auch wieder Zeit zum Antworten...
danke für dein konkretes Beispiel erstmal. Aber ich verstehe irgendwie die Komponente CreateRectRgn() nicht ganz... Es geht um die Angaben in der Klammer. Ich habe es so interpretiert: CreateRectRgn(AbstandLinks,AbstandOben,Breite,Höhe ). Aber wenn ich das Rechteck auf eine Position > 100/200 (das validiert auch merke ich gerade) bringen will, dann macht er das nicht, sondern geht nur bis XXX Pixel und hängt den Rest an die Breite und/oder die Höhe des Rechtecks dran. Ich glaube jedenfalls, dass er das macht. Jedenfalls verschiebt er es nicht weiter von oben und von links, als XXX Pixel. Wenn man etwas höheres eingibt, ändert sich die Größe des Rechtecks. Also das ganze habe ich mir in sniper_w's Beispiel angeguckt, weil er das Rechteck ja färbt. Was mache ich falsch? ... |
Re: Bereiche festlegen
Zitat:
z.B:
Delphi-Quellcode:
var p1,p1 : TPoint;
begin p1 := Point(x1,y1); p2 := Point(x2,y2); Canvas.Rectangle(p1.x,p1.y, p2.x,p2.y); end; Zitat:
|
Re: Bereiche festlegen
Zitat:
Delphi-Quellcode:
heißen? Sonst deklariert man ja zweimal eine Variable mit gleichem Bezeichner. Da kommt meist eine Fehlermeldung wie "Identifier redeclared" oder so ähnlich.
var p1,p2 : TPoint;
MfG Binärbaum |
Re: Bereiche festlegen
Zitat:
|
Re: Bereiche festlegen
Also gut.
Die Koordinaten geben also die Position der oberen linken und der unteren rechten Ecke an. Das hättet ihr mich auch leichter sagen können ;) Egal, jetzt weiß ichs ja. Aber den Sinn verstehe ich nicht ganz. Breite und Höhe fände ich praktischer.. Also danke für die Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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 by Thomas Breitkreuz