Jak to zwykle bywa, odpocząłem trochę od pisania kodu, dzisiaj usiadłem i zaczęło nagle działać.
SetMapMode(Canvas.Handle, MM_ISOTROPIC); // wymagane do użycia poniższych funkcji.
SetWindowExtEx(Canvas.Handle, 1, 1, nil);
SetViewportExtEx(Canvas.Handle, 2, 2, nil); // dwukrotne powiększenie rysowanego obiektu
SetViewPortorgEx(Canvas.handle, clientwidth div 2,clientheight div 2,nil); // przesunięcie środka współrzędnych z lewego górnego rogu na środek formy
Canvas.LineTo(100,100);
Nie rozpracowałem jednak tematu jeszcze do końca. Funkcje te należy wywoływać każdorazowo bezpośrednio przed rysowaniem, inaczej stosowane są wartości domyślne.
Jeśli użyjemy samej funkcji SetMapMode lub wrzucimy ją po funkcjach Set... (ale wtedy te nie zadziałają...) , to obrócimy układ współrzędnych na kartezjański.
Skalę zmieniamy za pomocą SetViewportExtEx. Zmieniamy ją zmieniając dwie wartości (dla osi X i Y osobno), w przykładzie dwukrotne powiększenie. Jeśli użyjemy wartości ujemnnych, skalę zmniejszymy.