Hallo,
ein besserer Titel ist mir nicht eingefallen. Hab da ein kleines Problem. ich benutze ein image auf dem ich mit moveto/lineto ein gitternetz erstelle.
Dann habe ich da noch ein Edit welches ich mit der mouse verschieben kann. wenn ich die taste loslasse soll das edit am gitternetz ausgrichtet werden, und zwar immer zur oberen und zur linken linie hin. Prüfen tue ich das ganze über den Farbwert des Pixels vom image auf dem sich die oberen linken Ecke des Edits befindet.
An sich funktioniert das ganze ja schon, aber nicht immer. Entweder geht er nicht bis zur oberen linie oder nicht zur linken.
Ich habe keine Ahnung warum das so ist.
Habe auch schon versuch den Quelltext umzustellen. Hilft ja manchmal. Hier mal 2 Beispiele.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| x1:= edit1.Left; x2:= edit1.Left; y1:= edit1.Top; y2:= edit1.Top;
repeat x2:=x2-1; y2:=y2-1; until image2.Canvas.Pixels[x2,y2] = clsilver; repeat x1:=x1-1; y1:=y1-1; until image2.Canvas.Pixels[x1,y1] = clsilver;
edit1.left := x2; edit1.Top := y1; |
oder
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| x1:= edit1.Left; x2:= edit1.Left; y1:= edit1.Top; y2:= edit1.Top;
repeat if image2.Canvas.Pixels[x2,y2] <> clsilver then x2:=x2-1; if image2.Canvas.Pixels[x2,y2] <> clsilver then y2:=y2-1; if image2.Canvas.Pixels[x1,y1] <> clsilver then x1:=x1-1; if image2.Canvas.Pixels[x1,y1] <> clsilver then y1:=y1-1; until (image2.Canvas.Pixels[x1,y1] = clsilver) and image2.Canvas.Pixels[x2,y2] = clsilver); edit1.left := x2; edit1.Top := y1; |
Nur so nebenbei. Gibt es auch andere Komponenten die ich benutzen könnte aus ein Image um ein leeres Blatt darzustellen. TImage oder TForm sind die einzigen bei denen ich Canvas gefunden habe. Vieleicht gibt es ja auch eine komfortablere Lösung als meine.