AGB  ·  Datenschutz  ·  Impressum  







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

Bereiche festlegen

Ein Thema von Remake · begonnen am 19. Feb 2005 · letzter Beitrag vom 5. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
Remake

Registriert seit: 12. Feb 2005
11 Beiträge
 
#1

Bereiche festlegen

  Alt 19. Feb 2005, 18:04
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
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#2

Re: Bereiche festlegen

  Alt 19. Feb 2005, 18:10
Du könntest es mit Regions versuchen. Hier im Forum suchenhrgn
Einfach die Bereiche mit CreateRectRegion() erstellen und mit PtInRegion beim Klick abfragen
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Remake

Registriert seit: 12. Feb 2005
11 Beiträge
 
#3

Re: Bereiche festlegen

  Alt 20. Feb 2005, 13:02
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?
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Bereiche festlegen

  Alt 20. Feb 2005, 13:13
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:
An application creates a region by calling a function associated with a specific shape. The following table shows the function(s) associated with each of the standard shapes.

Shape Function
Rectangular region CreateRectRgn, CreateRectRgnIndirect
Rectangular region with rounded corners CreateRoundRectRgn
Elliptical region CreateEllipticRgn, CreateEllipticRgnIndirect
Polygonal region CreatePolygonRgn, CreatePolyPolygonRgn


Each region creation function returns a handle that identifies the new region. An application can use this handle to select the region into a device context by calling the SelectObject function and supplying this handle as the second argument. After a region is selected into a device context, the application can perform various operations on it.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Bereiche festlegen

  Alt 20. Feb 2005, 13:32
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;
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Remake

Registriert seit: 12. Feb 2005
11 Beiträge
 
#6

Re: Bereiche festlegen

  Alt 2. Mär 2005, 19:30
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? ...
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Bereiche festlegen

  Alt 2. Mär 2005, 20:00
Zitat:
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 ).
CreateRectRgn() ist keine Komponente, sondern eine Win API Funktion. Die Angaben in der Klammer sind genau so zu verstehen wie bei der z.B. Canvas.Rectangle().
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:
Rectangle(
int nLeftRect, // x-coord. of bounding rectangle's upper-left corner
int nTopRect, // y-coord. of bounding rectangle's upper-left corner
int nRightRect, // x-coord. of bounding rectangle's lower-right corner
int nBottomRect // y-coord. of bounding rectangle's lower-right corner
);
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Bereiche festlegen

  Alt 2. Mär 2005, 20:50
Zitat von sniper_w:
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;
Sollte die erste Zeile nicht lieber
var p1,p2 : TPoint; heißen? Sonst deklariert man ja zweimal eine Variable mit gleichem Bezeichner. Da kommt meist eine Fehlermeldung wie "Identifier redeclared" oder so ähnlich.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Bereiche festlegen

  Alt 2. Mär 2005, 20:56
Zitat:
Sonst deklariert man ja zweimal eine Variable mit gleichem Bezeichner. Da kommt meist eine Fehlermeldung wie "Identifier redeclared" oder so ähnlich.
Ist es dir nicht aufgefallen, dass das ein Schreibfehler sein könnte. Es kommt nämlich vor.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Remake

Registriert seit: 12. Feb 2005
11 Beiträge
 
#10

Re: Bereiche festlegen

  Alt 4. Mär 2005, 17:04
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:25 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