Thread Apfelmännchen (11 answers)
Opened by Mampfgnom at 2010-11-10 08:42

lichtkind
 2010-11-10 14:24
#142614 #142614
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
also in Wx machst dus mit einer PainDC. ich hab ein programm was sowas kann, allerdings nicht open source deswegen nur der interessante teil:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
        my $dc = $frame->{dc} = Wx::MemoryDC->new();
        my $bmp = $frame->{bmp} = Wx::Bitmap->new( $maltafelgroesse, $maltafelgroesse );
        $dc->SelectObject( $bmp );
        leere_zeichenbrett();
        my $maltafel = $frame->{tafel} = Wx::StaticBitmap->new( $panel, -1, $bmp);
        $dc->Clear();
        $dc->SelectObject( $bmp );
        $dc->SetTextForeground( Wx::Colour->new( 0,0,128) );
        $dc->DrawText( $ziffer, $x, $y );

abd du wills ja pixel setzen nicht schrift dazu brauchst farbe mirt der pinsel deisinierst:
Code (perl): (dl )
1
2
3
4
5
6
7
        push @farben, Wx::Colour->new( @$_ ) for @farbdef;
        push @pinsel, 
                [Wx::Pen->new($_,5,&Wx::wxSOLID),
                 Wx::Pen->new($_, 1, &Wx::wxSOLID),
                 Wx::Brush->new($_, &Wx::wxSOLID)  ] for @farben;
        $dc->SetPen( $pinsel[$nr][0] );
        $dc->DrawLine( $xmax-30, $y, $xmax, $y);

die genauen details findes in der normalen doku in der Wx::DC. der zeichnet recht schenll weil erst wenn updaten willst sagst:
Code: (dl )
1
2
3
4
5
sub erneure_maltafel {
$frame->{tafel}->SetBitmap( $frame->{bmp} );
$frame->{dc}->SelectObject( $frame->{bmp} );
$frame->{tafel}->Refresh();
}


mit der maus ist gan einfach, schau in die wxperl tafel, siehe sig:

Code (perl): (dl )
1
2
        EVT_LEFT_DOWN  ( $panel, sub {$button[1]->SetLabel( 'touch the panel with left click' ) });
        EVT_LEFT_UP    ( $panel, sub {$button[1]->SetLabel( 'release the panel from left click' ) });

die callback sub bekommt als zweiten parameter das event objekt den mit $event->GetX und GetY fragen kannst wo cursor war. wenn ganzezeit ein rechteck zur ausgewählten fläche anzeigen willst musst natürlich auch noch
Code (perl): (dl )
EVT_MOTION ( $button[1], sub { });

abfangen.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.

View full thread Apfelmännchen