AGB  ·  Datenschutz  ·  Impressum  







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

Punkte auf Bild

Ein Thema von Char · begonnen am 17. Okt 2003 · letzter Beitrag vom 18. Okt 2003
Antwort Antwort
Char

Registriert seit: 17. Okt 2003
21 Beiträge
 
#1

Punkte auf Bild

  Alt 17. Okt 2003, 15:13
Hallo, ich bin neu hier

Und zwar habe ich folgendes Problem:

Ich möchte (bzw. ich tue es) ein Bild anzeigen (dazu verwende ich die Picture-Komponente). Jetzt soll man auf eine bestimme Stelle dieses Bildes (es ist eine Karte) klicken können, sodass dort ein z.B. roter Punkt erscheint. Dessen Koordinaten sollen dann in einer Textdatei gespeichert werden und er muss anklickbar sein.

Das mit dem Anklicken könnte ich eventuell selbst hinkriegen, mein Problem ist viel mehr wie ich sozusagen dynamisch einen roten Punkt auf das jeweilige Bild bekomme. Dabei ist wichtig, dass das Bild ansich nicht geändert wird, sondern beim Start des Programms die Koordinaten von n vielen Punkten ausgelesen werden und dann eben auch n viele Punkte an den jeweiligen Stellen erscheinen (das Auslesen der Koordinaten sollte auch kein Problem sein).

Prinzipiell brauche ich also eine Möglichkeit quasi dynamisch beliebig viele Punkte auf diese Picture-Komponente zu legen.

Kann sein, dass die Frage ziemlich einfach zu beantworten ist, aber ich habe Delphi noch nicht so lang und kenne mich auch (NOCH) nicht sooo sehr damit aus.

Kann man Shape-Komponenten dynamisch erstellen? Dann wäre mein Problem glaub ich gelöst...
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Punkte auf Bild

  Alt 17. Okt 2003, 15:16
Delphi-Quellcode:
MyShape: TShape;
...
MyShape:=TShape.Create(self);
with MyShape do
begin
  Parent:=Form1; //Ich kenne keine Picture Kompo, nur die Image
  Left:=...;
  Top:=...;
  Width:=...;
  Height:=...;
  Show;
  ...
end;
Edit: Herzlich Willkommen im Forum!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Punkte auf Bild

  Alt 17. Okt 2003, 15:32
Kuck dir mal das Ereignis OnMouseDown an.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.164 Beiträge
 
Delphi 12 Athens
 
#4

Re: Punkte auf Bild

  Alt 17. Okt 2003, 15:32
Nimm eine Image-Komponente (TImage) in dein Form.
Lad' über OI/Eigenschaften/Picture ein Bild rein.
Und weis OI/Ereignisse/OnMouseDown folgende Procedure zu.

Delphi-Quellcode:
Type TForm1 = Class(TForm)
    Image1: TImage;
    Procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  Private
    Procedure ShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  End;

...

Procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  Var f: TextFile;
    MyShape: TShape;

  Begin
    MyShape := TShape.Create(self);
    With MyShape do Begin
      Parent := Image1;
      Left := X;
      Top := Y;
      Width := 1;
      Height := 1;
      Pen.Color := clRed;
      OnMouseDown := ShapeMouseDown;
    End;
    AssignFile(f, 'Dateiname.txt');
    If FileExists('Dateiname.txt') Then Append(f) Else Reset(f);
    Writeln(f, IntToStr(X) + ':' + IntToStr(Y));
    CloseFile(f);
  End;

Procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  Begin
    ...
  End;
hoffe, jetzt stimmts...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Char

Registriert seit: 17. Okt 2003
21 Beiträge
 
#5

Re: Punkte auf Bild

  Alt 17. Okt 2003, 15:45
Oha das ging ja schnell...

Vielen Dank, im Moment kann ich das leider nicht ausprobieren, aber es scheint plausibel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.164 Beiträge
 
Delphi 12 Athens
 
#6

Re: Punkte auf Bild

  Alt 18. Okt 2003, 19:54
Probleme mit Parent und Dateizugriff behoben:
Angehängte Dateien
Dateityp: exe projekt.exe (290,9 KB, 11x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.164 Beiträge
 
Delphi 12 Athens
 
#7

Re: Punkte auf Bild

  Alt 18. Okt 2003, 23:25
Sender = Image1 in ShapeMouseDown war natürlich falsch gewesen.
Hab's im oberen DL schon geändert.
"Sender = Image1" => "TShape(Sender).Parent = Form1"

***

Was deine anderen Fragen angeht:
-die Position eines Objekts ist relativ zu der des Parent

-TImage kann nicht als Parent genommen werden, um die Position relativ zum Image zu setzen
Als Parent (übergeordnetes Objekt) können nur Steuerelemente fungieren, die ein Nachkomme von TWinControl sind. Wie z.B. TForm, TPanel.
(hatte ja auch erst den Fehler gemacht)

-Offset ist hier die Differenz zwischen zwei Punkten.
z.B. ist Pixel [10, 20] von Image1 an der selben Stelle wie Pixel [26, 36] von Form1
(Das ist auch einer der Gründe, warum es 2 Images sind)

-Objektumwandlung:
!Sender(TObject) und Shape(TShape) sind inkompatiebel.
Beim Aufruf der EreignisProzedur wird das Objekt (die Komponente), über welches diese Procedure aufgerufen wurde, mit übergeben.
Und damit man mit den Eigenschaften des Objektes arbeiten kann muss es noch umgewandelt werden.
Da ShapeMouseDown von mehrenen Shapes aufgerufen werden kann, ist es so möglich an dessen Daten zu gelangen.
Image1MouseDown wird immer nur von Image1 aufgerufen, daher konnte z.B. Image1.Top verwendet werden, an statt TImage(Sender).Top.

-mit "TShape(Sender).Parent = Form1" wird abgefragt ob das gerade angeklickte Shape zu Form1 gehört oder nicht.


Fragen schadet ja nicht. Nur wer nicht fragt, schadet sich selbst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:55 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