![]() |
canvas.line markieren = dicker zeichnen wenn maus drüber
Hallo,
habe ein problem beim programmieren. Ich möchte wenn ich über eine gezeichnete linie gehe, bzw. im bereich von 5 pixel links davon oder rechts davon bin, dass sie dann dicker gezeichnet wird. Das funktioniert nicht ganz so wie ich das möchte, weil entweder wird die linie immer dann neu gezeichnet wenn ich nicht im Markierungsbereich bin, sie flackert, oder sie wird nicht mehr dünn gezeichnet, weil mein mouse.move event zu schnell ist und meine funktion überzeichne dicke und zeichne dünne nicht vollständig ausführt. Hatt denn jemand eine Lösung dafür. bin schon am Verzweifeln :wall: Hier mal mein quelltext wie es nicht funktioniert :( . mausueber wind von mousemove aufgerufen. Viel dan im vorraus. [delphi] unit Bildobjekt; interface uses Graphics, windows, Variants, SysUtils; type TBildobjekt = class private { Private-Deklarationen } public procedure Erstellen(pos:tpoint);{ Public-Deklarationen } procedure Randzeichnen(penwidth:integer); procedure mausueber(pos:tpoint); end; var oldrand:Trect; newrand:Trect; var_Bildobjekt:TBildobjekt; implementation uses Page; procedure TBildobjekt.Erstellen(pos:tpoint); begin oldrand.Left:=pos.X-7; oldrand.Top:=pos.Y-130; oldrand.Right:=pos.x+100-7; oldrand.Bottom:=pos.Y+100-130; Randzeichnen(1); end; procedure Tbildobjekt.Randzeichnen(penwidth:integer); begin Page.Form2.Canvas.Pen.Mode:=pmnotxor; page.Form2.Canvas.Pen.Style:=psdash; page.Form2.canvas.Pen.Width:=penwidth; Page.Form2.Canvas.rectangle(oldrand); end; procedure Tbildobjekt.mausueber(pos:tpoint); var marked:boolean; randis:integer; unmarked:boolean; begin if marked = false then // marked gegen das flackern aber funktioniert alle nicht so.... if ((pos.X -7)> (oldrand.left-5)) and ((pos.x-7)< (oldrand.Left+5)) then begin marked:=true; randzeichnen(2); end; if marked=true then if (((pos.X -7)< (oldrand.left-5)) or ((pos.x-7)> (oldrand.Left+5))) then begin marked:=false; randzeichnen(2); end; end; end. |
Re: canvas.line markieren = dicker zeichnen wenn maus drüber
Crossposts sollten angegeben werden, aber der Crosspost ist ja deshalb ohnehin schon geschlossen:
![]() Du zeichnest die Linie ja auch nie wieder dünn. Was du eigentlich machen müsstest ist doch prüfen, ob sich der Status (Maus drüber oder nicht) geändert hat, wenn die Maus bewegt wurde. Stattdessen prüfst du zweimal die selbe Bedingung und nur in x-Richtung und zeichnest nur mit einer Dicke von 2 und nicht wieder mit 1. Dann zu der Bedingung:
Delphi-Quellcode:
Ich forme mal um:
if ((pos.X -7)> (oldrand.left-5)) and ((pos.x-7)< (oldrand.Left+5)) then
(pos.X -7)> (oldrand.left-5) // +7 (pos.X) > (oldrand.left-5) + 7 pos.X > oldrand.left + 2 (pos.x-7)< (oldrand.Left+5) // +7 pos.x < (oldrand.Left+5) + 7 pos.x < oldrand.Left + 12 Ist das so gedacht? Jedenfalls musst du die Linie auch wieder dünn zeichnen, wenn die Bedingung nicht erfüllt ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr. |
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