Entwickler-Ecke
Sonstiges (Delphi) - rectangle auf image in beliebige grösse ziehen
Pepp3r - Mi 15.11.06 21:36
Titel: rectangle auf image in beliebige grösse ziehen
Folgendes:
Ich möchte auf image1 ein rectangle (quadrat) aufziehen können, das heißt auf mousedown werden die x1 und y1 coordinaten festgelegt und bei mouseup x2 und y2 festgelegt (in image1.canvas.rectangle(x1,y1,x2,y2)).
Als Resultat möchte ich also ein quadrat in beliebiger Größe auf aufziehen können. Wie ist sowas möglich????
Narses - Mi 15.11.06 21:39
Moin!
Schau dir mal Image1.Canvas.DrawFocusRect() an, damit geht sowas. ;)
cu
Narses
Pepp3r - Mi 15.11.06 21:43
Narses hat folgendes geschrieben: |
Moin!
Schau dir mal Image1.Canvas.DrawFocusRect() an, damit geht sowas. ;)
cu
Narses |
erstma danke für die schnelle antwort :)
also dieser befehl ist mir neu, was muss denn zwischen die klammern damit es funktioniert?
Narses - Mi 15.11.06 21:46
Moin!
Stell mal den Cursor auf die Methode und drück F1. :D
cu
Narses
Pepp3r - Mi 15.11.06 22:17
sry, aber das hilft mir net weiter, bin in sachen delphi eher noch in den windeln.....
aaaalsoo, mir wird etwas von "(const Rect: TRect)" gesagt, vomitich ehrlich gesagt nicht recht hin weis.
Ich habe das so interpretiert, dass Rect eine Konstante von TRect ist. Wie es genau weiter geht, konnte mir weder das delphi-forum noch google sagen, was bedeudet, dass ich weiterhin auf euch angewiesen bin, so leit es mir auch tut :(
Pepp3r - Do 16.11.06 00:30
danke aim, das thema hat mich ein stück weiter gebracht.
ich habe das was da stand ma 1:1 übernommen, aber als resultat hab ich dann keine quadrate, sondern komische striche die vertikal durchs bild laufen.
ich glaube, es könnte daran liegen, dass ich x1,x2,y1,x2 falsch definiert habe
Quelltext
1:
| var x1,x2,y1,x2:integer; |
da integer ja nur ganze zahlen beinhaltet, aber wie sollte ich das sonst definieren?
ansonsten hab ich keine ahnung wo der fehler liegen könnte :(
Narses - Do 16.11.06 00:41
Moin!
Hm, möchtest du sowas gummibandartiges haben, also sehen, wie das Rechteck aufgezogen wird, oder willst du einfach nur mit der Maus ein Rechteck "zeichnen"? :gruebel:
cu
Narses
Pepp3r - Do 16.11.06 00:55
ich möchte wie ein "gummiband" ein quadrat aufziehen können :)
Narses - Do 16.11.06 01:05
Moin!
Dann probier das mal so: ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure DrawFocusRect; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private public X0,Y0,MX,MY: Integer; InMove: Boolean; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin InMove := FALSE; end;
procedure TForm1.DrawFocusRect; begin Form1.Canvas.DrawFocusRect(Rect(X0,Y0,MX,MY)); end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) then begin X0 := X; MX := X; Y0 := Y; MY := Y; DrawFocusRect; InMove := TRUE; end; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if (InMove) then begin DrawFocusRect; MX := X; MY := Y; DrawFocusRect; end; end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (InMove) then begin DrawFocusRect; MX := X; MY := Y; InMove := FALSE; end; end;
end. |
cu
Narses
Pepp3r - Do 16.11.06 13:16
also das klapt schonma im sinne des gummibandes, aber ich hab dich falsch verstanden, ich möchte doch ein rechteck "zeichnen" ~~ oh man, sry, jetz hab ich erst richtig verstanden wie du das meintest.
Blackheart666 - Do 16.11.06 14:03
Pepp3r hat folgendes geschrieben: |
danke aim, das thema hat mich ein stück weiter gebracht.
ich habe das was da stand ma 1:1 übernommen, aber als resultat hab ich dann keine quadrate, sondern komische striche die vertikal durchs bild laufen.
ich glaube, es könnte daran liegen, dass ich x1,x2,y1,x2 falsch definiert habe
Quelltext 1:
| var x1,x2,y1,x2:integer; |
da integer ja nur ganze zahlen beinhaltet, aber wie sollte ich das sonst definieren?
ansonsten hab ich keine ahnung wo der fehler liegen könnte :( |
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Form1: TForm1; x1,x2,y1,x2:integer; implementation
{$R *.dfm} |
Blackheart666
Narses - Do 16.11.06 14:48
Moin!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (InMove) then begin DrawFocusRect; MX := X; MY := Y; InMove := FALSE; Form1.Canvas.Rectangle(X0,Y0,MX,MY); end; end; |
cu
Narses
aim65 - Do 16.11.06 15:46
Hab erst jetzt mal wieder reingeguckt. Die Variablendeklaration x1,y1,x2,y2:Integer hatte ich in meinem Beispiel vorausgesetzt. Wenn Du das wie von Blackheart66 einsetzt, geht's auf jeden Fall.
Alle Beispiele hier beziehen sich auf die Form als Canvas. Falls Du das in einem Image machen willst, mußt du eben den Canvas darauf beziehen und natürlich auch die Mouse-Events vom Image verwenden (denke ich mir so... nicht probiert).
Übreigens: wenn Du das Quadrat mit der Maus in y-Richtung aufziehen willst, schreibst Du das hier
Delphi-Quelltext
1: 2:
| x2 := x1+y-y1; y2 := y; |
@ Narses: Deinen Ansatz muß ich mal ausprobieren.
aim65 - Do 16.11.06 16:10
Hatte ich doch glatt übersehen...
Du hattest x1,x2,y1,x2 statt y2geschrieben. Das wollte Blackheart wohl ohne Kommentar andeuten.
Kein Wunder, daß Du da nur Linien kriegst. :D
Pepp3r - So 19.11.06 13:12
ok leute, danke für die hilfe, ihr habt mich sehr weiter gebracht, das Problem is gelöst :>
Gruß
Pepp3r
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!