Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Image (https://www.delphipraxis.net/45045-image.html)

atreju2oo0 28. Apr 2005 16:48

Re: Image
 
Oder du nimmst onmouseup von dem Image...

Stefan_w 28. Apr 2005 16:50

Re: Image
 
tja das is mir auch klar. ganz doof bin ich ja auch nicht. aber ich wollte halt wissen obs nicht nen befehl gibt der mir die position von der mouse auf dem image gibt. waren übrigens die koordinaten von der mouse auf dem desktop und nicht auf dem form.

leddl 28. Apr 2005 18:24

Re: Image
 
Ähm, also die Koordinaten die du über Mouse.CursorPos bekommst sind natürlich auf den Bildschirm bezogen. Die x und y, die aber als Parameter an die OnMouseMove, OnMouseUp, OnMouseDown, etc übergeben werden, geben dir direkt die Koordinaten auf dem Form an.
Das gilt aber auch nur für die Events des Forms. Wie aber atreju2oo0 bereits festgestellt hat, besitzt auch das Image an sich diese Events.

Airblader 28. Apr 2005 18:38

Re: Image
 
In deiner Beispielprozedur ist eckpunkte lokal definiert, d.h. die variable wird immer wieder gelöscht.
Du musst die Variable entsprechend im public/privat Abschnitt deklarieren (oder halt ganz global - das mögen hier einige aber nicht :) )

Edit: Mal ein schneller Test.
Ok, nun gehts
(Nachteil ist noch, dass nach dem Zeichnen eines Dreiecks ein Mausklick "leer" ist und dann erst 3 neue folgen.
Und dass man das Fenster nicht minimieren sollte ;))


Aber nur zu Testzwecken

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
  private
    // Variable für Ecken
    ecke: integer;
    // Variable für Array d. Punkte
    points: array[0..2] of TPoint;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
        points[ecke-1].X := X;
        points[ecke-1].Y := Y;

        Inc(ecke);

        if ecke = 4 then
        begin
                with Form1.PaintBox1 do
                begin
                        Canvas.MoveTo(points[0].X, points[0].Y);
                        Canvas.LineTo(points[1].X, points[1].Y);

                        Canvas.MoveTo(points[1].X, points[1].Y);
                        Canvas.LineTo(points[2].X, points[2].Y);

                        Canvas.MoveTo(points[2].X, points[2].Y);
                        Canvas.LineTo(points[0].X, points[0].Y);
                end;
                ecke := 1;
        end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
        ecke := 1;
end;

end.

Kroko1999 28. Apr 2005 18:41

Re: Image
 
Jede Komponente hat
ClientToScreen
und
ScreenToClient zum Umrechnen!

Khabarakh 28. Apr 2005 18:45

Re: Image
 
Nur zur Vollständigkeit:
Die Daten von Mouse.CursorPos (also global) kannst du mittels TControl.ScreenToClient in lokale Koordinaten umrechnen.

[edit] @Kroko1999: Jedes Control :wink: [/edit]

Stefan_w 1. Mai 2005 20:36

Re: Image
 
vielen dank schonmal für den quelltext. wie würde ich das denn jetzt beispielsweise machen wenn ich sowas wie bei paint haben wollte, dass ich bspw. auf einen punkt eines images drücke, die mouse gedrückt lasse irgendwohin den cursor bewege und der mir immer die gerade von dem drückpunkt bis zu dem aktuellen cursorpunkt macht. also praktisch wie die strichversion bei paint. hab da schon dran rumprobiert ohne hilfe. aber da ich nicht so wirklich viel kann kam da auch nicht wirklich viel bei rum :-(. ich hoffe da mal stark auf eure hilfe. schonmal danke dafür

gruß stefan

DGL-luke 1. Mai 2005 20:44

Re: Image
 
diese methode heisst "gummiband" und ist in der delphi7-pe OH ausführlich beschrieben.

genial oder? ob es beim d2005 auch noch drin ist, weiss ich nicht.

EDIT: ebenso. einfach Suche->Gummiband

EDIT: ich will ja nicht so sein:

Die Grundmethode:
1.das aktuelle Bild in einen Puffer speichern
2.im onmousedown die koords speichern
3.im onmousemove zuerst das bild zeichnen und dann eine linie von den gespeicherten koords zu der aktuellen ziehen
4.im onmouseup die linie auch in den puffer zu speichern.
5.fertig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:23 Uhr.
Seite 2 von 2     12   

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