AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Mehrere Markierungen in TImage setzen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Markierungen in TImage setzen

Ein Thema von RonaldMauthe · begonnen am 26. Mär 2007 · letzter Beitrag vom 27. Mär 2007
Antwort Antwort
RonaldMauthe

Registriert seit: 26. Mär 2007
3 Beiträge
 
#1

Mehrere Markierungen in TImage setzen

  Alt 26. Mär 2007, 14:35
Hallo,

wie kann ich mehrere Markierungen (z.B. Kreise) in ein TImage setzen?

Aktueller Stand: Der User lädt ein beliebiges Bild in ein TImage Control.
Neue Funktion: Der User soll Markierungen im Bild setzen können.

Ich möchte folgende Funktionen haben:

Button1 = Neue Markierung setzen (grün)
Button2 = Neue Markierung setzen (blau)
Button3 = Markierung löschen

Bei Klick auf einen Button wird die Markierung in die Mitte des Bildes gesetzt. Der User kann die Markierung mit der Maus bewegen und neu positionieren.

Es können pro Bild maximal 7 Markierungen möglich sein.

Wenn der User auf eine Markierung klickt, soll sie hervorgehoben werden (damit man erkennt, welche Markierung aktiv ist).

Mit dem Button "Markierung löschen" soll die aktive Markierung gelöscht werden.

Das ganze Bild mit allen Markierungen soll auch gedruckt werden.

Hat da jemand einen Ansatz für mich (oder einen fertigen Code)

Vielen Dank für eure Hilfe,
Ronald
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: Mehrere Markierungen in TImage setzen

  Alt 26. Mär 2007, 15:01
Schau mal in der hilfe nach unter:

Delphi-Referenz durchsuchenTImage Delphi-Referenz durchsuchenTBitmap Delphi-Referenz durchsuchenTCanvas

Delphi-Quellcode:
procedure SoUndSo...
begin
  With ImageX.Picture.Bitmap do
  begin
    Canvas.Brush.Style := bsClear
    Canvas.Pen.Color := clGreen;
    Canvas.Rectangle(x,y,x2,y2);
  end;
end;
Bei Markierung löschen musst du entweder einen Teilbereich aus einem temp. Bitmap kopieren
oder du lädst nas komplette bitmap neu und mals alle anderen Markierungen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
RonaldMauthe

Registriert seit: 26. Mär 2007
3 Beiträge
 
#3

Re: Mehrere Markierungen in TImage setzen

  Alt 26. Mär 2007, 15:17
Hallo Matti,

für die statische Anzeige ist das sicher eine gute Sache, aber der User soll die Markierung ja auch verschieben können.
Dann müsste ich bei der Lösung erst das Bild neu laden (um alle Markierungen zu löschen), dann alle alten Markierungen neu zeichnen und die aktuelle Markierung an die Mausposition setzen. Und den ganzen Vorgang bei jeder Mausbewegung erneut. Das wird dann wohl ziemlich flackern.

Gibt es denn für das Verschieben der Markierung noch eine andere Möglichkeit ?

Gruß,
Ronald
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Mehrere Markierungen in TImage setzen

  Alt 26. Mär 2007, 15:31
Willkommen in der Delphi-PRAXiS, Ronald!

Du könntest für die zu verschiebenden Punkte jeweils ein Delphi-Referenz durchsuchenTShape nehmen:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    [...]
  private
    FMarker : TShape;
    FAnchor : TPoint;
    FOrgPos : TPoint;
    FPanning : Boolean;
    function CreateMarker (aColor: TColor): TShape;
  end;

[...]

CONST
  SHAPESIZE = 15;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FMarker := CreateMarker(clLime);
end;

function TForm1.CreateMarker(aColor: TColor): TShape;
begin
  Result := TShape.Create(Self);
  with Image1 do
    Result.SetBounds(Left + (Width - SHAPESIZE) div 2,
                     Top + (Height - SHAPESIZE) div 2, SHAPESIZE, SHAPESIZE);

  Result.Parent := Self;
  Result.Shape := stCircle;
  Result.Brush.Color := aColor;
  Result.OnMouseDown := ShapeMouseDown;
  Result.OnMouseMove := ShapeMouseMove;
  Result.OnMouseUp := ShapeMouseUp;
end;

procedure TForm1.ShapeMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FAnchor := Mouse.CursorPos;
  FOrgPos := TShape(Sender).BoundsRect.TopLeft;
  FPanning := True;
end;

procedure TForm1.ShapeMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FPanning then
    begin
      TShape(Sender).Top := FOrgPos.Y + (Mouse.CursorPos.Y - FAnchor.Y);
      TShape(Sender).Left := FOrgPos.X + (Mouse.CursorPos.X - FAnchor.X);
    end;
end;

procedure TForm1.ShapeMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FPanning := False;
end;
Das ist natürlich nur ein Anfang. Die Verwaltung der Shapes (Speichern der Referenzen, Begrenzung der Anzahl, Einfärben beim Anklicken, Löschen) sowie eine eventuelle Einschränkung der Mausbewegung mußt du noch ergänzen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: Mehrere Markierungen in TImage setzen

  Alt 26. Mär 2007, 15:35
[quote="RonaldMauthe"]Hallo Matti,

für die statische Anzeige ist das sicher eine gute Sache, aber der User soll die Markierung ja auch verschieben können.
Dann müsste ich bei der Lösung erst das Bild neu laden (um alle Markierungen zu löschen), dann alle alten Markierungen neu zeichnen und die aktuelle Markierung an die Mausposition setzen. Und den ganzen Vorgang bei jeder Mausbewegung erneut. Das wird dann wohl ziemlich flackern.
Wenn man es richtig macht nicht.
- Das Bild neu laden ist schlecht, kopieren ist besser.
- Die Koordinaten in einem Array zwischenspeichern.

Zitat von RonaldMauthe:
Gibt es denn für das Verschieben der Markierung noch eine andere Möglichkeit ?
Du kannst in einem darüberliegendem Image (transparent) die Markierungen setzen (für die Schnelle )
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Mehrere Markierungen in TImage setzen

  Alt 26. Mär 2007, 15:59
nur mit EINEM TImage wird es nicht gehen. Denn ein TImage ist zur Anzeige EINES Bildes gedacht. Und Bilder haben die Eigenschaft, wie ein Blatt Papier, das man drau malen kann aber das was man mit dem stift gemalt hat kann man auf einem Blatt nicht verschieben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
RonaldMauthe

Registriert seit: 26. Mär 2007
3 Beiträge
 
#7

Re: Mehrere Markierungen in TImage setzen

  Alt 27. Mär 2007, 09:23
Vielen Dank für die Hilfe, bin damit weitergekommen.
Gruß,
Ronald
  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 01:36 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