![]() |
Grafische Darstellung eines Bereichs
Hallo, :-D
wie kann ich Delphi sagen, dass, wenn Shape1 über Shape2 "fährt", ein Event ausgelöst wird? Egal wo sie sind. |
Re: Grafische Darstellung eines Bereichs
machs doch mit drag over
|
Re: Grafische Darstellung eines Bereichs
Was heißt denn "fährt"? Programmatisches bewegen über Left/Top?
Das wirst du dann wohl selbst berechnen müssen, ob die Shapes sich schneiden. |
Re: Grafische Darstellung eines Bereichs
Wenn die beiden Shapes programmtechnisch bewegt werden kannst du ein überschneiden mit der folgenden Funktion prüfen.
Delphi-Quellcode:
Rect ist der Bereich in dem sich die beiden anderen TRect´s sich überschneiden.
function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean;
R1 und R2 sind die "Rechtecke" um die beiden Bereiche, die du prüfen möchtest. Wenn die Shapes nicht rechteckig sind wird diese Funktion schon früher ein True zurückgeben. |
Re: Grafische Darstellung eines Bereichs
Das geht nicht:
Delphi-Quellcode:
if IntersectRect(out Shape3; Shape1, Shape2)=true then
begin // Anweisungen end; :wiejetzt: |
Re: Grafische Darstellung eines Bereichs
Du rufst es auch falsch auf.
Delphi-Quellcode:
Eventuell solltest du dich parallel mal mit den Grundlagen über die Benutzung von Funktionen und Prozeduren, Parametern usw. beschäftigen.
var
IntersectShape : TShape; begin if IntersectRect(IntersectShape, Shape1, Shape2) then begin //Anweisung end; |
Re: Grafische Darstellung eines Bereichs
Dann meldet er Fehler:
[Fehler] Unit1.pas(34): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen [Fehler] Unit1.pas(34): Inkompatible Typen: 'TRect' und 'TShape' [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden unter dem Quelltext:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); var IntersectShape : TShape; begin if IntersectRect(IntersectShape, Shape1, Shape2) then begin //Anweisung halt; end; Shape1.Left:=Shape1.Left+2; end; end. Ich bin extrem neu...... :oops: :wall: |
Re: Grafische Darstellung eines Bereichs
Ach, da hab ich selber nicht hingeschaut. War ja nur so im Browser getipselt :D
Es wird ein TRect erwartet, kein TShape. Daher, wir brauchen nur das Rect des Shapes (Wört sind englisch. Falls unklar nutze Wörterbuch :-)).
Delphi-Quellcode:
Manchmal hilft es, die Methoden einer Klasse sich anzuschauen.
IntersectRect(r, Shape1.BoundsRect, Shape2.BoundsRect) ...
Zitat:
|
Re: Grafische Darstellung eines Bereichs
Danke, :!:
wo kann cih mir das denn anschauen? Die Tutorails sind für Enterprise gemacht. mfg Johannes013 |
Re: Grafische Darstellung eines Bereichs
Welche Tutorials?
Grundsätzlich kann man glaube ich sagen, dass es bei den Dingen, mit denen du dich beschäftigen solltest, egal ist, für welche Version die geschrieben sind. Die Sprache ist überall (weitestgehend) die selbe, nur der Umfang der Komponenten/IDE/Installations-CD variiert zwischen den Versionen (grob gesagt). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 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