Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TRect wird nicht gezeichnet (https://www.delphipraxis.net/118403-trect-wird-nicht-gezeichnet.html)

Larsi 7. Aug 2008 09:39


TRect wird nicht gezeichnet
 
Hi,

ich versuche im Moment ein Rechteck namens Rec vom Typ TRect auf ein Image zu bekommen. Mein Ansatz lautet so:

Delphi-Quellcode:
procedure TForm16.FormCreate(Sender: TObject);
begin
  image1.canvas.Pen.mode :=pmNotXor;
  image1.canvas.pen.style:= psDot;
  image1.canvas.pen.color:=clRed;
end;
Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Image1.canvas.brush.style :=bsClear;
if shift = [ssleft] then
  begin
    x1 := x;
    y1 := y;
      Cut.TopLeft.X := x1;
   Rec.TopLeft.Y := y1;
   Rec.BottomRight.X := x2;
   Rec.BottomRight.Y := y2;
 Image1.Canvas.DrawFocusRect(Rec);
  end;
end;
Delphi-Quellcode:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

 if shift = [ssleft] then begin
 x2 := x;
 y2 := y;
     Rec.TopLeft.X := x1;
   Rec.TopLeft.Y := y1;
   Rec.BottomRight.X := x2;
   Rec.BottomRight.Y := y2;
 Image1.Canvas.DrawFocusRect(Rec);
  end;
end;
Wenn ich das jetzt aber versuche, also Maus drücken und gedrückt bewegen und dann loslassen dann flackert das Image ein bisschen aber ein Rechteck ist nicht zu sehen. Was mache ich denn falsch? Muss ich dem Rec irgendwie eine Farbe zum zeichnen oder so zuweisen, und wenn ja, wie?


MFG Lars Wiltfang

Keldorn 7. Aug 2008 09:57

Re: TRect wird nicht gezeichnet
 
Hallo

warum nimmst du drawfocusrect und nicht rectangle?

Farbzuweisungen gehen über canvas.pen.color (Malfarbe) und canvas.brush.color für Hintergrund, hast du ja auch schon verwendet.

In den Demos unter Doc/Graphex findest du auch ein gutes Beispiel, wie das mit dem Ziehen und anzeigen geht.

Gruß Frank

Kalfany 7. Aug 2008 10:00

Re: TRect wird nicht gezeichnet
 
ich würde mal
Delphi-Quellcode:
Image1.canvas.brush.style :=bsClear;
nich auf bsClear sondern auf bsSolid setzten :D

Codewalker 7. Aug 2008 11:42

Re: TRect wird nicht gezeichnet
 
Zitat:

Zitat von Kalfany
ich würde mal
Delphi-Quellcode:
Image1.canvas.brush.style :=bsClear;
nich auf bsClear sondern auf bsSolid setzten :D

Warum, das würde das Rechteck doch füllen und nicht nur den Umriss zeichnen (wenn ich mich nicht irre)

Larsi 7. Aug 2008 11:51

Re: TRect wird nicht gezeichnet
 
Egal ob bssolid oder bsclear gesetzt ist, der Umriss des Rechtecks ist nicht rot woran liegt das? Wenn man bssolid nimmt, dann sieht man wenigstens den Umriss des Rechtecks!

Kalfany 7. Aug 2008 12:27

Re: TRect wird nicht gezeichnet
 
Zitat:

Zitat von Larsi
Egal ob bssolid oder bsclear gesetzt ist, der Umriss des Rechtecks ist nicht rot woran liegt das? Wenn man bssolid nimmt, dann sieht man wenigstens den Umriss des Rechtecks!

das liegt an dem
Delphi-Quellcode:
image1.canvas.Pen.mode :=pmNotXor;
auch einfach mal weglassen



Zitat:

Zitat von Codewalker
Zitat:

Zitat von Kalfany
ich würde mal
Delphi-Quellcode:
Image1.canvas.brush.style :=bsClear;
nich auf bsClear sondern auf bsSolid setzten :D

Warum, das würde das Rechteck doch füllen und nicht nur den Umriss zeichnen (wenn ich mich nicht irre)

ich glaub du irrst dich :D

Larsi 7. Aug 2008 12:29

Re: TRect wird nicht gezeichnet
 
Dann sehe ich aber immernoch keine rote Linie die das Rechteck einrahmt!

Kalfany 7. Aug 2008 12:34

Re: TRect wird nicht gezeichnet
 
Zitat:

Zitat von Larsi
Dann sehe ich aber immernoch keine rote Linie die das Rechteck einrahmt!

habs auch grad gemerkt :mrgreen:

also Image1.canvas.brush.style :=bsClear; passt doch ... aber du darfst nicht DrawFocusRect nehmen sondern Rectangle denn für das DrawFocusRect gelten die farben nicht und es wird immer mit xor zum hintergrund gezeichnet (ist das gleiche wie im explorer wenn du datein markierst (zum ohne xp style))

Keldorn hatte also recht :thumb:

Larsi 7. Aug 2008 12:39

Re: TRect wird nicht gezeichnet
 
Aber wie kann ich das dann mit meinem Rec vom Typ Trec machen? Ich will ja mit dem Rechteck Rec anschließend noch was machen. Wenn ich das über Rectangle mache kann ich doch nicht genau auf das unbenannte Rechteck zugreifen oder?

DeddyH 7. Aug 2008 12:39

Re: TRect wird nicht gezeichnet
 
Man kann auch hier mal schauen ("Gummiband-Effekt").

Larsi 7. Aug 2008 12:41

Re: TRect wird nicht gezeichnet
 
ICh habe jetzt wirklich keine Zeit das alles durchzulesen kann mir nicht bitte jemand sagen wie ich mein problem lösen kann?

DeddyH 7. Aug 2008 12:55

Re: TRect wird nicht gezeichnet
 
Ich glaube, es geht los. Da schickt man einen Link zum Entwicklerhandbuch samt Suchbegriff und dann hat man "keine Zeit". :evil:

Kalfany 7. Aug 2008 13:00

Re: TRect wird nicht gezeichnet
 
Zitat:

Zitat von Larsi
Aber wie kann ich das dann mit meinem Rec vom Typ Trec machen? Ich will ja mit dem Rechteck Rec anschließend noch was machen. Wenn ich das über Rectangle mache kann ich doch nicht genau auf das unbenannte Rechteck zugreifen oder?

du brauchst nur das DrawFocusRect durch Rectangle ersetzen .... Rectangle nimmt auch dein TRect ... und dann kannst du ja noch sachen machen ... die koordinaten hast du ja noch in deinem TRect

nur weil du auf den canvas zeichnest (egal ob rectangle oder ellipse) weiß der canvas noch lange nicht das an der stelle was ist, du musst dir die koordinaten von deinem rechteck solange merken solange du damit was machen willst.

Larsi 7. Aug 2008 13:31

Re: TRect wird nicht gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt sieht man zwar die rote Linie aber es sieht so aus wie in dem Bild im Anhang!

DeddyH 7. Aug 2008 13:32

Re: TRect wird nicht gezeichnet
 
Tja, da wird wohl jemand doch lesen müssen :mrgreen:

mimi 7. Aug 2008 13:45

Re: TRect wird nicht gezeichnet
 
hier gab es mal ein Beispiel Projekt dazu. Such doch mal nach DrawFX glaube ich hieß das.
Das sollte deine Fragen klären.

Codewalker 7. Aug 2008 14:27

Re: TRect wird nicht gezeichnet
 
Zitat:

Zitat von Larsi
ICh habe jetzt wirklich keine Zeit das alles durchzulesen kann mir nicht bitte jemand sagen wie ich mein problem lösen kann?

So viel zum Thema Eigeninitiative, das gibt's ja wohl nicht :evil:

mimi 7. Aug 2008 15:36

Re: TRect wird nicht gezeichnet
 
Ich verstehe gar nicht wo da das Problem liegt. Z.B. mein Paint2 Hier konnte auch sowas was du wolltest.

Evlt. hilft dir diese Schritt für Schritt Anleitung weiter:
Ich gehe von einem neuen Projekt aus
01: Hintergrund Buffer anlegen
02: Eine PaintBox auf das From Plazieren
03: Im onPaint Event der PaintBox mit Paintbox1.canvas.Draw(0,0,buffer) alles auf die PaintBox kopieren
04: In MouswDown die geklickten Maus Position speichern
05: Bei MouseMove das Rect auf den Buffer zeichnen. Hier könntest den Buffer erstmal überzeichnen mit einem fillrect. Oder du zeichnest alles zweimal. Das überzeichnen ist aber sicherer !
06: Fertig, wenn ich nix übersehen habe.

Aber hier im Forum sollte es genügend Beispiele geben. Evlt. erstelle ich heute noch eins. Mal sehen.
Aber schau dir mal DrawFX an oder mein Paint2 Projekt. Evlt. hilft dir das ja schon weiter.

Irgendwo gab es auch mal ein klein Soruce-Code dazu. Wie man ein Paint erstellen kann. Ein MiniPaint. Aber den habe ich heute nicht gefunden, weil ich auch nicht mehr genau weiß wo es den gab :(

DeddyH 7. Aug 2008 15:41

Re: TRect wird nicht gezeichnet
 
Ich verweise nochmals auf diesen Post. Da braucht man keinen Buffer.

mimi 7. Aug 2008 16:42

Re: TRect wird nicht gezeichnet
 
und was machst du wenn du eine Hintergrund Grafik einbinden möchtest und darauf dann deine Objekte zeichnen möchtest ?
Ich habe schlechte Erfahrung gemacht. mit notXOR

mimi 7. Aug 2008 16:49

Re: TRect wird nicht gezeichnet
 
Ich habe mir die PDF Datei angesehene, ich meine auch im Delphi Demo Ordner müsste es schon ein Beispiel geben.

Die PDF Datei ist nicht schlecht. Auch wenn ich unter Lazarus bin, könnte sie hilfreich sein. Da ja vieles gleich oder ählich geht. Wie gesagt ich hattet mit pmNotXor schlechte Erfahrung gemacht.

edit:
EXAMPLES\DOC\GRAPHEX
dort gibt es ein beispiel.

Die Muhkuh 8. Aug 2008 00:09

Re: TRect wird nicht gezeichnet
 
Hi,

Du musst entweder das alte löschen oder über das alte noch mal mit pmNotXor drüber malen. Letzte Variante nutze ich und funktioniert 1a.

rotfc 8. Aug 2008 01:29

Re: TRect wird nicht gezeichnet
 
@DeddyH: Leider fast schon sehr OT:

Zitat:

Zitat von DeddyH
Man kann auch hier mal schauen ("Gummiband-Effekt").

Hab' mir darin mal alles zu (T)Frames durchgelesen, aber leider fast nichts kapiert
:wall:

Mit dem Nichtkapieren/Nichtwissen um (T)Frames entgehen mir bestimmt viele Vereinfachungen unter D5!

@DeddyH: Frames und FrameSets kenne ich bislang nur von HTML. Könntest Du mir da(zu) eine Parallele zu Delphis (T)Frames "erklären", falls die beiden gleichnamigen Bezeichnungen überhaupt vergleichbar sind?

:cheers: ?

Die Muhkuh 8. Aug 2008 01:31

Re: TRect wird nicht gezeichnet
 
Was hat das mit Larsis Post zu tun?

Mach doch eine neue Frage zu TFrames auf ;)

rotfc 8. Aug 2008 02:35

Re: TRect wird nicht gezeichnet
 
Zitat:

Zitat von Die Muhkuh
Was hat das mit Larsis Post zu tun?

Mach doch eine neue Frage zu TFrames auf ;)

OK

(Edith hat etwas Schwachsinn entfernt)

omata 8. Aug 2008 03:45

Re: TRect wird nicht gezeichnet
 
Liste der Anhänge anzeigen (Anzahl: 1)
...

_frank_ 8. Aug 2008 13:17

Re: TRect wird nicht gezeichnet
 
ich hab schon wieder das Gefühl, dass viele keinen Bock haben, zu suchen...

http://www.delphipraxis.net/internal...t.php?t=137509 ist nur ein Beispiel...

mal abgesehen von der immer wieder anzutreffenden, abartigen Idee, auf einem TImage zu zeichnen...

Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:38 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