AGB  ·  Datenschutz  ·  Impressum  







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

auf linen klicken

Ein Thema von mimi · begonnen am 9. Nov 2006 · letzter Beitrag vom 23. Dez 2006
 
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#27

Re: auf linen klicken

  Alt 23. Dez 2006, 12:44
ich habe jetzt nochmal" idontwantaname" lösung probiert !
Sie läuft besser als "flossinger" lösung allerdins habe ich dennoch ein problem:
ich habe eine obj was auf ein andres liegt z.b.
eine line liegt auf ein viereck dann wird die line nicht mehr erkannt:
Delphi-Quellcode:
function GetLineClickA(x1,y1,x2,y2,x3,y3:Integer):Boolean;
var
// Gegeben
  A: TPoint; // Punkt der Geraden
  B: TPoint; // Punkt der Geraden
  P: TPoint; // Punkt des Mausklicks
// errechnete Werte
  g: TPoint; // Richtungsvektor
  n: TPoint; // Normalvektor
  d: Integer; // d = a*x + b*y

  HNF: Double;

begin
  a.x:=x1; a.y:=y1;
  b.x:=x2; b.y:=y2;
  p.x:=x3; p.y:=y3;
  
  g := Point(B.X - A.X, B.Y - A.Y);
  n := Point(g.Y, -g.X);
  d := n.X * A.X + n.Y * A.Y;

  HNF := Abs((n.X * P.X + n.Y * P.Y - d) / Sqrt(n.X * n.X + n.Y * n.Y));

  // hier Wert anpassen
  if HNF < 20 then
    result:=True
 // ShowMessage('getroffen')
  else
    result:=false;
// ShowMessage('daneben');
end;

// verwenden tue ich das hier:
function TmyList.GetItemIndex(x,y:Integer;Obj:TObjectList;state:TShiftState):Integer;
var
  i,pIndex:Integer;
  r:TRect;
  Region: THandle;
begin
  pIndex:=-1;

  for i:=0 to obj.count-1 do begin
    with TPaint2BasesObj(liste.items[i]) do begin
      if obj.Items[i] is TLine = false then begin
        r.left:=position.x; r.top:=position.y; r.Right:=size.x;r.Bottom:=size.y;
        if PtInRect(r,point(x,y)) = true then
          pindex:=i;
      end
      else begin
      if (GetLineClickA(position.x,position.y,size.x,size.y,x,y) = true) and (pindex = -1) then
         pindex:=i;
      end;
    end;
  end;
  if pindex > -1 then begin
    selobject:=TPaint2BasesObj(liste.items[pindex]);
    itemindex:=pIndex;
  end;
  writeLn(IntTostr(Pindex));

  result:=Pindex;
  if pindex > -1 then begin
    if ssshift in state then
    TPaint2BasesObj(liste.items[pindex]).Sel:=True;
  end
  else begin
    SetSelObj(false);
    selobject:=bg;
  end;
  Region:=0;
// Region
end;
nun die fehler:
bei flossinger function die ich oben gepostet habe habe ich leider folgenden fehler:
ich habe wieder mehre objekte und nun platzier ich linen auf die paintbox.... nun kann ich nur noch die line und das erste objekt auswählen.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
 


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 07:19 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