space picture
That's me, folks

Partnerprogramme



Preisvergleich und Testberichte zu Notebooks und Digitalkameras.

quality content
Firefox - Autobilder odge - PHP
Stadt Blogs

Flugtickets günstig
Flugtickets
Schiffsreisen
Partnerprogramme Sofortkredit

Kampfkunst
Metal - Germanio
Warnhinweise

Handy  regio-2  Billigflüge
Billigflüge Monatslinsen
Kredite in Berlin
Last Minute Urlaub 12 zinsen
Schufa Auskunft
Wakeboarding



Linkpopularität
Vermiculite shop
Türkei Reisen
FreeSMS - Hotels
Usenet Hilfe

space picture space picture

How To: Grafische Ausgabe mit MacPerl

Eines der von vielen schmerzlich vermißten Funktionen bei Perl ist das Fehlen jedweder grafischen Ausgabe. Zwar gibt es unter *NIX mittlerweile eine Schnittstelle zu Tcl/Tk, aber unter MacPerl ist diese nicht verfügbar.

Was viele jedoch nicht wissen: Es ist unter MacPerl sehr einfach auf Funktionen der Macintosh Toolbox zuzugreifen und die grafische Ausgabe darüber zu leiten. Um z.B. ein einfaches Fenster aufzumachen und darin Grafik und Text auszugeben, benötigt man nur folgende Module: Mac::Windows muß aufgerufen werden, um ein Fenster zu erstellen, Mac::QuickDraw ist für die Ausgabe von Grafiken zuständig, Mac::Fonts gibt Text aus und Mac::Events ist für die Ereignisbehandlung wie Tastatur- und Mauseingaben verantwortlich.

Als Beispiel habe ich mein Standard-Testprogramm, die Schmetterlingskurve, gewählt (ein Python-Skript, das das gleiche leistet und Hintergrundinformationen zur Kurve gibt es hier). Erst einmal ein Screenshot:

PerlButt

Der Quelltext des Perl-Skripts ist von erfrischender Kürze:


#!perl

use strict;
use Mac::Windows;
use Mac::QuickDraw;
use Mac::Fonts;
use Mac::Events;

my ($style, $title, $win, $winrect);

$style = noGrowDocProc();
$title = "Butterfly";
$winrect = Rect->new(75, 75, 400, 400);
$win = MacWindow->new($winrect, $title, 1, $style, 1);
$win->sethook("redraw" => \&drawIt);

while ($win->window())
{
	WaitNextEvent();
}

END
{
	$win->dispose() if (defined($win));
}

sub drawIt
{
	my ($theta, $r, $x, $y);
	$theta = 0.0;
	while ($theta < 75.39)
	{
		$r = exp(cos($theta)) - 2*cos(4*$theta) 
                            + (sin($theta/12))**5;
		# In Polarkoordinaten konvertieren:
		$x = $r*cos($theta);
		$y = $r*sin($theta);
                # auf Fenstergröße skalieren
		$x = ($x*30) + 150;		
		$y = ($y*30) + 150;
		if ($theta == 0.0)
		{
			MoveTo($x, $y)
		}
		else
		{
			LineTo($x, $y)
		}
		$theta += 0.02;
	}
	TextSize(12);
	MoveTo(60, 300);
	DrawString("Schmetterlingskurve in MacPerl");
}

Zuerst wird der Fenstertyp festgelegt, in diesem Fall ein normales Fenster, bei dem aber keine Größenveränderung zugelassen wird. Dann werden die Koordinaten des Fensters (in Bildschirmkoordinaten, links oben, rechts unten) bestimmt und schließlich das Fenster angelegt. Schließlich wird noch ein Callback gesetzt, der festlegt, daß die Routine drawIt immer dann aufgerufen wird, wenn ein Redraw des Fensters notwendig ist.

Das Programm beendet sich automatisch, wenn in die Closebox des Fenster geklickt wird, weitere Event-Behandlungen sind daher in diesem Fall nicht erforderlich.


Literatur:

Vicki Brown and Chris Nandor: MacPerl. Power and Ease, Sunnyvale CA (Primetime Freeware) 1998

space picture space picture space picture space picture

Werbung
Aktueller Monat
Juli 2006
So
Mo
Di
Mi
Do
Fr
Sa
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
Interne Links
Moments To Remember
Der Schockwellenreiter am 25.7.2005, am 25.7.2004, am 25.7.2003, am 25.7.2002, am 25.7.2001.
Latest Pics
www.flickr.com
Archiv
Kategorien
Daily Google
[Macro error: Can't evaluate the expression because the name "dGoogle" hasn't been defined.]
Technorati Chart
[Macro error: Can't evaluate the expression because the name "tChart" hasn't been defined.]
Irrepressible.info
Werbung
Spambot-Futter