Registriert seit: 27. Sep 2005
Ort: Frankfurt
62 Beiträge
Delphi 6 Personal
|
Runtime Error bei PtInRegion
23. Dez 2012, 14:07
hallo allerseits,
bin gerade dabei ein dart scoring programm zu schreiben.. fand die projekte, die bisher realisiert wurden optisch nicht sonderlich ansprechend und wollte mich daher selbst mal dran setzen. prinzip soll folgendes sein: im prog ist ein bild der dartscheibe eingebunden über das man mit der maus fährt und dann klickt man auf das gewünschte feld um seine score zu klicken. um das umzusetzen habe ich mich jetzt mal mit ptinregion befasst und das in zwei ereignisse eingebunden. erstens auf den mousemove, sodass einem per textausgabe angezeigt wird, über welchem feld ich mich aktuell befinde und zweitens dann auf mousedown, um den entsprechenden bereich zu bestätigen. beim ersten wird dann zum beispiel "double20" angezeigt und beim zweiten wird dann die score "40" eingetragen. ich habe das vom ansatz jetzt wie folgt gelöst
Delphi-Quellcode:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var rgn_s1_1, rgn_s1_2, rgn_d1, rgn_t1 : HRGN;
plist_s1_1, plist_s1_2, plist_d1, plist_t1 : array [0..4] of TPoint;
begin
label5.Caption:='X: ' + IntToStr(X) + 'Y: ' + IntToStr(Y); //aktuell nur drin um die koordinaten zu ermitteln
//***************************SINGLE 1******************************
plist_s1_1[0] := Point(282,52);
plist_s1_1[1] := Point(340,71);
plist_s1_1[2] := Point(310,129);
plist_s1_1[3] := Point(271,117);
rgn_s1_1 := CreatePolygonRgn(plist_s1_1,4,Winding);
if PtInRegion(rgn_s1_1, x, y)
then StaticText4.Caption := '1';
plist_s1_2[0] := Point(270,130);
plist_s1_2[1] := Point(304,140);
plist_s1_2[2] := Point(259,230);
plist_s1_2[3] := Point(254,228);
rgn_s1_2 := CreatePolygonRgn(plist_s1_2,4,Winding);
if PtInRegion(rgn_s1_2, x, y)
then StaticText4.Caption := '1';
//***************************DOUBLE 1******************************
plist_d1[0] := Point(284,41);
plist_d1[1] := Point(344,61);
plist_d1[2] := Point(341,68);
plist_d1[3] := Point(283,49);
rgn_d1 := CreatePolygonRgn(plist_d1,4,Winding);
if PtInRegion(rgn_d1, x, y)
then StaticText4.Caption := 'D1';
//***************************TREBLE 1******************************
plist_t1[0] := Point(272,120);
plist_t1[1] := Point(308,132);
plist_t1[2] := Point(305,137);
plist_t1[3] := Point(271,126);
rgn_t1 := CreatePolygonRgn(plist_t1,4,Winding);
if PtInRegion(rgn_t1, x, y)
then StaticText4.Caption := 'T1';
leider kommt es für mich nicht wirklich logisch zu einem runtime error... läuft erstmal ganz normal und das prinzip funktioniert auch einwandfrei, allerdings stirbt mir der mist nach ner weile hin und her bewegen der maus weg?!
Zitat:
"Im Projekt Project1.exe ist eine Exception der Klasse EOutOfResources aufgetreten. Meldung: 'Fehler beim Erstellen des Fenster-Gerätekontexts'. Prozeß wurde angehalten. ..."
ich gehe davon aus, dass es irgendwelche komplikationen bezüglich der regionen gibt?! wenn ich jetzt zum beispiel für sich überschneidende regionen zwei unterschiedliche ereignisse erwarte, ist es ja klar, dass nicht eindeutig ist, ob er jetzt "1" oder "D1" anzeigen soll... eigentlich dürften sich die regionen aber nicht überschneiden :O jemand eine idee woran das liegen könnte?!
vielen dank schonmal
|