gehen wir mal die mouseup procedure , Zeile für Zeile, wie der PC durch.
Also wir haben den Code
Code: Alles auswählen
{1}if (spx < 0) and (spy < 0) then
{2} begin
{3} spx := x;
{4} spy := y;
{5} end;
{6} if (spx > -1) and (spy > -1) then
{7} begin
{8} FPaint.Image.Canvas.Line(spx,spy,x,y);
{9} spx := -1;
{10} spy := -1;
{11} end;
Wir starten das Programm spx ist -1 . spy ist -1.
Wir gehen in die Prozedure x = 20, y = 30.
Zeile 1: Bedingung erfüllt. spx ist -1 und spy ist -1.
Zeile 3: Ordne spx den wert 20 zu.
Zeile 4:Ordne spy den wert 30 zu.
// stand der Dinge : spx = 20, spy = 30. x = 20, y = 30;
Zeile 6: spx ist >-1 und spy ist >-1, da 20 und 30.
Zeile 8: Wir zeichnen eine Linie. da spx = x und spy =y , für die Katz, man sieht nichts
Zeile 9: spx ist -1
Zeile 10: spy ist -1;
Und die Moral von der Geschicht ? Den Grafen den sieht man nicht.
ja, mehr oder weniger so. weil in der Mousover nochmal spx und spy geprüft werden ob die -1 sind. Und da die das immer sind, weil dein mouseup immer dafür sorgt das am ende spy und spx = -1 sind wird nie gezeichnet...
Das heißt du willst entweder das 1. oder das 2. in der mouseup-funktion abfragen. Hier würde sich ein else empfehlen.
Code: Alles auswählen
{1}if (spx < 0) and (spy < 0) then
{2} begin
{3} spx := x;
{4} spy := y;
{5} end
{6} else
{7} begin
{8} FPaint.Image.Canvas.Line(spx,spy,x,y);
{9} spx := -1;
{10} spy := -1;
{11} end;
Ach ja, tu mir den Gefallen und ersetze
Code: Alles auswählen
if panel.visible = false
then panel.visible := true
else panel.visible := false;
durch
Code: Alles auswählen
panel.visible := not panel.visible; // wert ist boolen. durch das not wird dieser umgedreht...