You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(6) |
Nov
(31) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(6) |
Feb
|
Mar
(17) |
Apr
(17) |
May
(27) |
Jun
(67) |
Jul
(26) |
Aug
(15) |
Sep
(2) |
Oct
(24) |
Nov
(6) |
Dec
|
2007 |
Jan
(4) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(28) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
(21) |
Feb
(45) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
(3) |
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Robert M. <rob...@us...> - 2005-11-13 18:58:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24631/t Added Files: 05_Timer_01_OEM.t 05_Timer_02_NEM.t 05_Timer_03_Interval.t 05_Timer_04_Kill.t 05_Timer_05_DESTROY.t Removed Files: 05_Timer.t Log Message: Bug fixes; re-work of WIn32::GUI::Timer; preparing for 1.03 release --- NEW FILE: 05_Timer_04_Kill.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_04_Kill.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 19; use Win32::GUI; my $ctrl = "Timer"; my $class = "Test::$ctrl"; my $elapse = 500; # ms # Test the Kill method my $W = new Win32::GUI::Window( -name => "TestWindow", ); my $C = Test::Timer->new($W, 'T1', $elapse); isa_ok($C,$class, "new creates $class object"); isa_ok($C,"Win32::GUI::Timer", "$class is a subclass of Win32::GUI::Timer"); isa_ok($W->T1, $class, "\$W->T1 contains a $class object"); isa_ok($W->T1,"Win32::GUI::Timer", "\$W->T1 contains a subclass of Win32::GUI::Timer"); is($C, $W->T1, "Parent references $ctrl"); my $id = $C->{-id}; ok(($id > 0), "timer's -id > 0"); ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($W->{-timers}->{$id}, 'T1', "Timer's name is stored in parent"); is($C->{-name}, 'T1', "Timer's name is stored in timer object"); is($C->{-handle}, $W->{-handle}, "Parent's handle is stored in timer object"); is($C->{-interval}, $elapse, "Timer interval is stored in timer object"); # Kill tests is($C->Kill(), $elapse, "Kill() returns timer interval"); is($C->Interval(), 0, "Kill() sets inteval to zero"); is($Test::Timer::x, 0, "DESTROY not called yet"); ok(!defined($C->Kill(1)), "Kill(1) returns undef"); is($Test::Timer::x, 1, "Kill(1) calls DESTROY"); ok(!defined $W->{-timers}->{$id}, "Kill(1) tidies parent"); ok(!defined $W->{T1}, "Kill(1) tidies parent"); undef $C; #should remove last reference is($Test::Timer::x, 2, "DESTROY called for object destruction"); package Test::Timer; our (@ISA, $x); BEGIN { @ISA = qw(Win32::GUI::Timer); $x = 0; } sub DESTROY { my $self = shift; ++$x; $self->SUPER::DESTROY(@_); } --- 05_Timer.t DELETED --- --- NEW FILE: 05_Timer_01_OEM.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_01_OEM.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 14; use Win32::GUI; my $ctrl = "Timer"; my $class = "Win32::GUI::$ctrl"; my $elapse = 500; # ms # Test the basic construction, and timing: my @times; my $t0 = time; my $W = new Win32::GUI::Window( -name => "TestWindow", ); isa_ok($W, "Win32::GUI::Window", "\$W"); my $C = $W->AddTimer('T1', $elapse); isa_ok($C,$class, "\$W->AddTimer creats $class object"); isa_ok($W->T1, $class, "\$W->T1 contains a $class object"); is($C, $W->T1, "Parent references $ctrl"); my $id = $C->{-id}; ok(($id > 0), "timer's -id > 0"); ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($W->{-timers}->{$id}, 'T1', "Timer's name is stored in parent"); is($C->{-name}, 'T1', "Timer's name is stored in timer object"); is($C->{-handle}, $W->{-handle}, "Parent's handle is stored in timer object"); is($C->{-interval}, $elapse, "Timer interval is stored in timer object"); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } sub T1_Timer { my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; return scalar(@times) == 3 ? -1 : 0; } --- NEW FILE: 05_Timer_02_NEM.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_02_NEM.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 16; use Win32::GUI; my $ctrl = "Timer"; my $class = "Win32::GUI::$ctrl"; my $elapse = 500; # ms # Test the basic construction, and timing: my @times; my %params; my $t0 = time; my $W = new Win32::GUI::Window( -name => "TestWindow", -onTimer => \&_process_timer, ); isa_ok($W, "Win32::GUI::Window", "\$W"); my $C = $W->AddTimer('T1', $elapse); isa_ok($C,$class, "\$W->AddTimer creats $class object"); isa_ok($W->T1, $class, "\$W->T1 contains a $class object"); is($C, $W->T1, "Parent references $ctrl"); my $id = $C->{-id}; ok(($id > 0), "timer's -id > 0"); ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($W->{-timers}->{$id}, 'T1', "Timer's name is stored in parent"); is($C->{-name}, 'T1', "Timer's name is stored in timer object"); is($C->{-handle}, $W->{-handle}, "Parent's handle is stored in timer object"); is($C->{-interval}, $elapse, "Timer interval is stored in timer object"); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } @times=(); is($params{window}, $W, "Parent widow passed to NEM event handler"); is($params{name}, $C->{-name}, "timer name passed to NEM handler"); %params=(); sub _process_timer { $params{window} = shift; $params{name} = shift; my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; return scalar(@times) == 3 ? -1 : 0; } --- NEW FILE: 05_Timer_05_DESTROY.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_05_DESTROY.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 11; use Win32::GUI; my $ctrl = "Timer"; my $class = "Test::$ctrl"; my $elapse = 500; # ms # Test DESTRUCTION { my $W = new Win32::GUI::Window( -name => "TestWindow", ); my $C = Test::Timer->new($W, 'T1', $elapse); # DESTROY tests is($Test::Timer::x, 0, "DESTROY not called yet"); undef $C; # should still be a reference from the parent object is($Test::Timer::x, 0, "DESTROY not called yet"); undef $W; # should reduce ref count to parent to zero, and in turn Timer is($Test::Timer::x, 1, "DESTROY called when parent destroyed"); } { my $W = new Win32::GUI::Window( -name => "TestWindow", ); my $C = Test::Timer->new($W, 'T1', $elapse); my $id = $C->{-id}; ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($C, $W->T1, "Reference sotered in Parent"); # DESTROY tests $Test::Timer::x = 0; is($Test::Timer::x, 0, "DESTROY not called yet"); undef $C; # should still be a reference from the parent object is($Test::Timer::x, 0, "DESTROY not called yet"); $W->{T1} = undef; # naughty way to remove timer is($Test::Timer::x, 1, "DESTROY called when parent reference removed"); ok(!defined $W->{-timers}->{$id}, "DESTROY() tidies parent"); ok(!defined $W->{T1}, "DESTROY() tidies parent"); undef $W; is($Test::Timer::x, 1, "DESTROY not called when parent destroyed"); } package Test::Timer; our (@ISA, $x); BEGIN { @ISA = qw(Win32::GUI::Timer); $x = 0; } sub DESTROY { ++$x; shift->SUPER::DESTROY(); } --- NEW FILE: 05_Timer_03_Interval.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_03_Interval.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 11; use Win32::GUI; my $ctrl = "Timer"; my $class = "Win32::GUI::$ctrl"; my $elapse = 500; # ms # Test the basic construction, and timing: my @times; my $t0 = time; my $W = new Win32::GUI::Window( -name => "TestWindow", -onTimer => \&_process_timer, ); my $C = $W->AddTimer('T1', $elapse); is($C->Interval(), $elapse, "Interval() returns timer interval"); @times=(); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } is($C->Interval($elapse+500), $elapse, "Interval(SET) returns prior timer interval"); is($C->Interval(), $elapse+500, "Interval() returns new timer interval"); @times=(); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 2) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } sub _process_timer { my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; return scalar(@times) == 3 ? -1 : 0; } |
From: Robert M. <rob...@us...> - 2005-11-13 18:58:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/UserGuide In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24631/docs/GUI/UserGuide Modified Files: Readme.pod Log Message: Bug fixes; re-work of WIn32::GUI::Timer; preparing for 1.03 release Index: Readme.pod =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/UserGuide/Readme.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Readme.pod 3 Aug 2005 21:45:59 -0000 1.3 --- Readme.pod 13 Nov 2005 18:57:52 -0000 1.4 *************** *** 152,155 **** --- 152,156 ---- You will need B<tar>, B<gzip> and B<zip> utilities on your path. Issue the following commands. + perl Makefile.PL (adjust as necessary for your build environment) nmake |
From: Robert M. <rob...@us...> - 2005-11-13 18:58:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/Tutorial In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24631/docs/GUI/Tutorial Modified Files: Part4.pod Log Message: Bug fixes; re-work of WIn32::GUI::Timer; preparing for 1.03 release Index: Part4.pod =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/Tutorial/Part4.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Part4.pod 5 Oct 2005 22:20:49 -0000 1.2 --- Part4.pod 13 Nov 2005 18:57:52 -0000 1.3 *************** *** 56,65 **** =item * ! The timer keeps firing repeatedly. To disable a timer, use $timer->Kill(). =item * ! To change the interval of a timer (or to re-enable it after a Kill), use ! $timer->Interval(n). Setting an interval of zero disables the timer, just like Kill. --- 56,67 ---- =item * ! The timer keeps firing repeatedly. To disable a timer, use C<< $timer->Interval(0) >> ! or C<< $timer->Kill() >>. =item * ! To change the interval of a timer (or to re-enable it after C<< $timer->Interval(0) >> ! or C<< $timer->Kill() >>), use ! C<< $timer->Interval(n) >>. Setting an interval of zero disables the timer, just like Kill. |
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157 Added Files: Changes DIBitmap.html DIBitmap.pm DIBitmap.xs MANIFEST Makefile.PL Readme TYPEMAP Log Message: Added to repository --- NEW FILE: Makefile.PL --- use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Win32::GUI::DIBitmap', 'VERSION_FROM' => 'DIBitmap.pm', 'XS' => { 'DIBitmap.xs' => 'DIBitmap.cpp' }, 'LIBS' => ['Msvcprt.lib'], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' 'INC' => '', # e.g., '-I/usr/include/other' 'MYEXTLIB' => 'extlib/FreeImage.lib', ($] ge '5.005') ? ( 'AUTHOR' => 'ROCHER Laurent (lr...@cp...)', 'ABSTRACT' => 'Add new load/save image format and some image manipulation', ) : (), ); sub MY::xs_c { ' .xs.c: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c .xs.cpp: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp '; } --- NEW FILE: DIBitmap.html --- <HTML> <HEAD> <TITLE>DIBitmap.pm</TITLE> <LINK REV="made" HREF="mailto:"> </HEAD> <BODY> <A NAME="__index__"></A> <!-- INDEX BEGIN --> <UL> <LI><A HREF="#name">NAME</A></LI> <LI><A HREF="#synopsis">SYNOPSIS</A></LI> <LI><A HREF="#description">DESCRIPTION</A></LI> <LI><A HREF="#package functions">PACKAGE FUNCTIONS</A></LI> <UL> <LI><A HREF="#freeimage library info functions">FreeImage Library Info functions</A></LI> <LI><A HREF="#fif functions">FIF functions</A></LI> <LI><A HREF="#fif info functions">FIF info functions</A></LI> <LI><A HREF="#colors functions">Colors functions</A></LI> </UL> <LI><A HREF="#dibitmap object">DIBITMAP OBJECT</A></LI> <UL> <LI><A HREF="#dibitmap new methods">DIBitmap New methods</A></LI> <LI><A HREF="#dibitmap save methods">DIBitmap Save methods</A></LI> <LI><A HREF="#dibitmap information methods">DIBitmap information methods</A></LI> <LI><A HREF="#dibitmap and gd">DIBitmap and GD</A></LI> <LI><A HREF="#dibitmap pixels and background methods">DIBitmap Pixels and Background methods</A></LI> <LI><A HREF="#dibitmap convertion methods">DIBitmap Convertion methods</A></LI> <LI><A HREF="#dibitmap rotating and flipping">DIBitmap Rotating and flipping</A></LI> <LI><A HREF="#dibitmap upsampling / downsampling">DIBitmap UpSampling / DownSampling</A></LI> <LI><A HREF="#dibitmap color manipulation">DIBitmap Color manipulation</A></LI> <LI><A HREF="#dibitmap channel methods">DIBitmap Channel methods</A></LI> <LI><A HREF="#dibitmap copy/paste methods">DIBitmap Copy/Paste methods</A></LI> <LI><A HREF="#dibitmap devise context methods">DIBitmap Devise Context methods</A></LI> </UL> <LI><A HREF="#mdibitmap object">MDIBITMAP OBJECT</A></LI> <UL> <LI><A HREF="#mdibitmap new methods">MDIBitmap New methods</A></LI> <LI><A HREF="#mdibitmap get methods">MDIBitmap Get methods</A></LI> <LI><A HREF="#mdibitmap lock methods">MDIBitmap Lock methods</A></LI> <LI><A HREF="#mdibitmap edit methods">MDIBitmap Edit methods</A></LI> </UL> <LI><A HREF="#author">AUTHOR</A></LI> <LI><A HREF="#see also">SEE ALSO</A></LI> </UL> <!-- INDEX END --> <HR> <P> <H1><A NAME="name">NAME</A></H1> <P>Win32::GUI::DIBitmap add new reading/writing bitmap formats to Win32::GUI and some image manipulation.</P> <P> <HR> <H1><A NAME="synopsis">SYNOPSIS</A></H1> <PRE> use Win32::GUI; use Win32::GUI::DIBitmap;</PRE> <PRE> $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [400, 400], -name => "Window", );</PRE> <PRE> $dib = newFromFile Win32::GUI::DIBitmap ('image.jpg'); $hbitmap = $dib->ConvertToBitmap(); undef $dib;</PRE> <PRE> $W->AddButton ( -pos => [100, 100], -size => [200, 200], -bitmap => $hbitmap, -name => "Button", -visible => 1, );</PRE> <PRE> $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 }</PRE> <P> <HR> <H1><A NAME="description">DESCRIPTION</A></H1> <P>Win32::GUI::DIBitmap add new reading/writing bitmap formats to Win32::GUI and some image manipulation.</P> <P>This package use FreeImage 3.5.1, an open source image library supporting all common bitmap formats (visit : <A HREF="http://freeimage.sourceforge.net/">http://freeimage.sourceforge.net/</A> ).</P> <P>Supports many formats, such as:</P> <PRE> Format Reading Writing Description BMP Y Y Windows or OS/2 Bitmap [Export = 1 4 8 16 24 32] ICO Y Y Windows Icon [Export = 1 4 8 16 24 32] JPEG Y Y JPEG - JFIF Compliant [Export = 8 24] JNG Y N JPEG Network Graphics KOALA Y N C64 Koala Graphics IFF Y N IFF Interleaved Bitmap MNG Y N Multiple Network Graphics PBM Y Y Portable Bitmap (ASCII) [Export = 1 8 24] PBMRAW Y Y Portable Bitmap (RAW) [Export = 1 8 24] PCD Y N Kodak PhotoCD PCX Y N Zsoft Paintbrush PGM Y Y Portable Greymap (ASCII) [Export = 1 8 24] PGMRAW Y Y Portable Greymap (RAW) [Export = 1 8 24] PNG Y Y Portable Network Graphics [Export = 1 4 8 24 32] PPM Y Y Portable Pixelmap (ASCII) [Export = 1 8 24] PPMRAW Y Y Portable Pixelmap (RAW) [Export = 1 8 24] RAS Y N Sun Raster Image TARGA Y Y Truevision Targa [Export = 8 16 24 32] TIFF Y Y Tagged Image File Format [Export = 1 4 8 24 32] WBMP Y Y Wireless Bitmap [Export = 1] PSD Y N Adobe Photoshop CUT Y N Dr. Halo XBM Y N X11 Bitmap Format XPM Y Y X11 Pixmap Format [Export = 8 24] DDS Y N DirectX Surface GIF Y Y Graphics Interchange Format [Export = 8]</PRE> <P>FreeImage can handle multi-page file (TIFF and ICO support only).</P> <P> <HR> <H1><A NAME="package functions">PACKAGE FUNCTIONS</A></H1> <P> <H2><A NAME="freeimage library info functions">FreeImage Library Info functions</A></H2> <DL> <DT><STRONG><A NAME="item_GetVersion"><CODE>GetVersion</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the FreeImage version string.</PRE> <DT><STRONG><A NAME="item_GetCopyright"><CODE>GetCopyright</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the FreeImage copyright string.</PRE> </DL> <P> <H2><A NAME="fif functions">FIF functions</A></H2> <DL> <DT><STRONG><A NAME="item_Constante"><CODE>Constante</CODE></A></STRONG><BR> <DD> <PRE> FIF = Format Identifier File.</PRE> <PRE> FIF_UNKNOWN = -1 FIF_BMP FIF_ICO FIF_JPEG FIF_JNG FIF_KOALA FIF_LBM FIF_MNG FIF_PBM FIF_PBMRAW FIF_PCD FIF_PCX FIF_PGM FIF_PGMRAW FIF_PNG FIF_PPM FIF_PPMRAW FIF_RAS FIF_TARGA FIF_TIFF FIF_WBMP FIF_PSD FIF_IFF FIF_LBM FIF_CUT FIF_XBM FIF_XPM FIF_DDS FIF_GIF</PRE> <DT><STRONG><A NAME="item_GetFIFCount"><CODE>GetFIFCount</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the max FIF value.</PRE> <DT><STRONG><A NAME="item_GetFormatFromFIF"><CODE>GetFormatFromFIF</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return the string format from FIF value.</PRE> <DT><STRONG><A NAME="item_GetFIFFromFormat"><CODE>GetFIFFromFormat</CODE> (format)</A></STRONG><BR> <DD> <PRE> Return FIF value from the string format.</PRE> <DT><STRONG><A NAME="item_GetFIFFromMime"><CODE>GetFIFFromMime</CODE> (mime)</A></STRONG><BR> <DD> <PRE> Return FIF value from the Mime string.</PRE> <DT><STRONG><A NAME="item_GetFIFFromFilename"><CODE>GetFIFFromFilename</CODE> (filename)</A></STRONG><BR> <DD> <PRE> Return FIF value from the filename string.</PRE> <DT><STRONG><A NAME="item_GetFIFFromFile"><CODE>GetFIFFromFile</CODE> (filename)</A></STRONG><BR> <DD> <PRE> Return FIF value from file data.</PRE> <DT><STRONG><A NAME="item_GetFIFFromData"><CODE>GetFIFFromData</CODE> (data)</A></STRONG><BR> <DD> <PRE> Return FIF value from memory data.</PRE> </DL> <P> <H2><A NAME="fif info functions">FIF info functions</A></H2> <DL> <DT><STRONG><A NAME="item_FIFExtensionList"><CODE>FIFExtensionList</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a coma separated string of extension filenname.</PRE> <DT><STRONG><A NAME="item_FIFDescription"><CODE>FIFDescription</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a description string of the format.</PRE> <DT><STRONG><A NAME="item_FIFRegExpr"><CODE>FIFRegExpr</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a regexp string for identify format.</PRE> <DT><STRONG><A NAME="item_FIFMimeType"><CODE>FIFMimeType</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a mime-type string of the format.</PRE> <DT><STRONG><A NAME="item_FIFSupportsReading"><CODE>FIFSupportsReading</CODE> (fif)</A></STRONG><BR> <DD> <PRE> This format can be read ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsWriting"><CODE>FIFSupportsWriting</CODE> (fif)</A></STRONG><BR> <DD> <PRE> This format can be write ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsExportBPP"><CODE>FIFSupportsExportBPP</CODE> (fif, bpp)</A></STRONG><BR> <DD> <PRE> This format can be write bpp image ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsExportType"><CODE>FIFSupportsExportType</CODE> (fif, type)</A></STRONG><BR> <DD> <PRE> This format can export as image format type ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsICCProfiles"><CODE>FIFSupportsICCProfiles</CODE> (fif)</A></STRONG><BR> <DD> <PRE> This format support ICC profile ?</PRE> </DL> <P> <H2><A NAME="colors functions">Colors functions</A></H2> <DL> <DT><STRONG><A NAME="item_LookupX11Color"><CODE>LookupX11Color</CODE> (string_color)</A></STRONG><BR> <DD> <PRE> Return Color of string color or undef if error. This color value can be an integer value or a [B,G,R,A] array.</PRE> <DT><STRONG><A NAME="item_LookupSVGColor"><CODE>LookupSVGColor</CODE> (string_color)</A></STRONG><BR> <DD> <PRE> Return Color of string color or undef if error. This color value can be an integer value or a [B,G,R,A] array.</PRE> </DL> <P> <HR> <H1><A NAME="dibitmap object">DIBITMAP OBJECT</A></H1> <P> <H2><A NAME="dibitmap new methods">DIBitmap New methods</A></H2> <DL> <DT><STRONG><A NAME="item_new"><CODE>new</CODE> ([width=100, height=100, bpp=24, redmask=0, bluemask=0, greemask=0, type=FIT_BITMAP])</A></STRONG><BR> <DD> <PRE> Allocate a Win32::GUI::DIBitmap object.</PRE> <PRE> Image storage type availlable.</PRE> <PRE> FIT_UNKNOWN = 0 : unknown type FIT_BITMAP = 1 : standard image : 1-, 4-, 8-, 16-, 24-, 32-bit FIT_UINT16 = 2 : array of unsigned short : unsigned 16-bit FIT_INT16 = 3 : array of short : signed 16-bit FIT_UINT32 = 4 : array of unsigned long : unsigned 32-bit FIT_INT32 = 5 : array of long : signed 32-bit FIT_FLOAT = 6 : array of float : 32-bit IEEE floating point FIT_DOUBLE = 7 : array of double : 64-bit IEEE floating point FIT_COMPLEX = 8 : array of FICOMPLEX : 2 x 64-bit IEEE floating point</PRE> <DT><STRONG><A NAME="item_newFromFile"><CODE>newFromFile</CODE> (filename, [flag])</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBBitmap from a image file.</PRE> <PRE> Some format have special load flag :</PRE> <PRE> Type | Flag | Description -------+-------------------+-------------------------------------------------- ICO | ICO_MAKEALPHA | Convert to 32bpp and create an alpha channel from the AND-mask when loading JPEG | JPEG_FAST | Load file as fast as possible (sacrifing quality) | JPEG_ACCURATE | Load file with the best quality (sacrifing speed) PCD | PCD_BASE | Load picture sized 768 * 512. PCD | PCD_BASEDIV4 | Load picture sized 384 * 256. PCD | PCD_BASEDIV16 | Load picture sized 192 * 128. PNG | PNG_IGNOREGAMMA | Avoid gamma correction TARGA | TARGA_LOAD_RGB888 | Convert RGB555 and ARGB8888 to RGB888 TIFF | TIFF_CMYK | Load CMYK bitmap as 32 bit separated CMYK.</PRE> <DT><STRONG><A NAME="item_newFromData"><CODE>newFromData</CODE> (data, [flag])</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from memory data.</PRE> <DT><STRONG><A NAME="item_newFromBitmap"><CODE>newFromBitmap</CODE> (hbitmap)</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a Win32::GUI::Bitmap.</PRE> <DT><STRONG><A NAME="item_newFromDC"><CODE>newFromDC</CODE> (hdc, [x, y, w, h] )</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a Win32::GUI::DC.</PRE> <PRE> You can capture only a portion of the HDC with x,y,w,h option.</PRE> <DT><STRONG><A NAME="item_newFromWindow"><CODE>newFromWindow</CODE> (hwnd, [flag = 0])</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a Win32::GUI::Window.</PRE> <PRE> flag = 0 : All the window is capture (with border) flag = 1 : Only the Client window is capture</PRE> </DL> <P> <H2><A NAME="dibitmap save methods">DIBitmap Save methods</A></H2> <DL> <DT><STRONG><A NAME="item_SaveToFile"><CODE>SaveToFile</CODE> (filename, [fif, flag])</A></STRONG><BR> <DD> <PRE> Save a Win32::GUI::DIBitmap in a file.</PRE> <PRE> Some format have special save format :</PRE> <PRE> Type | Flag | Description ------+---------------------+-------------------------------------------------- BMP | BMP_SAVE_RLE | Compress bitmap using RLE JPEG | JPEG_DEFAULT | Save with good quality (75:1) | JPEG_QUALITYSUPERB | Save with superb quality (100:1) | JPEG_QUALITYGOOD | Save with good quality (75:1) | JPEG_QUALITYNORMAL | Save with normal quality (50:1) | JPEG_QUALITYAVERAGE | Save with average quality (25:1) | JPEG_QUALITYBAD | Save with bad quality (10:1) PxM | PNM_DEFAULT | Save bitmap as a binary file | PNM_SAVE_RAW | Save bitmap as a binary file | PNM_SAVE_ASCII | Save bitmap as a ascii file TIFF | TIFF_DEFAULT | Save using CCITFAX4 compression for 1bit and PACKBITS for other | TIFF_CMYK | Store tags for separated CMYK (conbine with compresion flag) | TIFF_PACKBITS | Save using PACKBITS compression | TIFF_DEFLATE | Save using DEFLATE compression | TIFF_ADOBE_DEFLATE | Save using Adobe DEFLATE compression | TIFF_NONE | Save without compression | TIFF_CCITTFAX3 | Save using CCITT Group 3 fax encoding | TIFF_CCITTFAX4 | Save using CCITT Group 4 fax encoding | TIFF_LZW | Save using LZW compression</PRE> <PRE> A tempory convertion is done for 16-32bit JPEG and 16bit PNG before saving.</PRE> <DT><STRONG><A NAME="item_SaveToData"><CODE>SaveToData</CODE> (fif, [flag])</A></STRONG><BR> <DD> <PRE> Save a Win32::GUI::DIBitmap in memory.</PRE> </DL> <P> <H2><A NAME="dibitmap information methods">DIBitmap information methods</A></H2> <DL> <DT><STRONG><A NAME="item_GetWidth"><CODE>GetWidth</CODE> () or <CODE>Width</CODE></A></STRONG><BR> <DD> <PRE> Return the Width of the image.</PRE> <DT><STRONG><A NAME="item_GetHeight"><CODE>GetHeight</CODE> () or <CODE>Height</CODE></A></STRONG><BR> <DD> <PRE> Return the Height of the image.</PRE> <DT><STRONG><A NAME="item_GetColorsUsed"><CODE>GetColorsUsed</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the number of color use in the image.</PRE> <DT><STRONG><A NAME="item_GetBpp"><CODE>GetBpp</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the bit per pixel use in the image.</PRE> <DT><STRONG><A NAME="item_GetRedMask"><CODE>GetRedMask</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a bit pattern describing the red color copmponent of a pixel.</PRE> <DT><STRONG><A NAME="item_GetGreenMask"><CODE>GetGreenMask</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a bit pattern describing the green color copmponent of a pixel.</PRE> <DT><STRONG><A NAME="item_GetBlueMask"><CODE>GetBlueMask</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a bit pattern describing the blue color copmponent of a pixel.</PRE> <DT><STRONG><A NAME="item_GetColorType"><CODE>GetColorType</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the color type of the image.</PRE> <PRE> Values : FIC_MINISWHITE = 0 : Monochrome bitmap, with first palette entry is white FIC_MINISBLACK = 1 : Monochrome bitmap, with first palette entry is black Palletised bitmap, with greyscale palette FIC_RGB = 2 : RGB color model FIC_PALETTE = 3 : Color map indexed FIC_RGBALPHA = 4 : RGB color model with alpha channel FIC_CMYK = 5 : CMYK color model</PRE> <DT><STRONG><A NAME="item_GetPitch"><CODE>GetPitch</CODE> ()</A></STRONG><BR> <DD> <PRE> Return pitch of data image. Pitch it's the width of the bitmap in bytes, rounded to the next 32 bit boundary.</PRE> <DT><STRONG><A NAME="item_GetDotsPerMeterX"><CODE>GetDotsPerMeterX</CODE> ()</A></STRONG><BR> <DD> <PRE> Return dots per meter on X.</PRE> <DT><STRONG><A NAME="item_GetDotsPerMeterY"><CODE>GetDotsPerMeterY</CODE> ()</A></STRONG><BR> <DD> <PRE> Return dots per meter on Y.</PRE> <DT><STRONG><A NAME="item_GetInfoHeader"><CODE>GetInfoHeader</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a windows BITMAPINFOHEADER struct.</PRE> <DT><STRONG><A NAME="item_GetInfo"><CODE>GetInfo</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a window BITMAPINFO struct.</PRE> <DT><STRONG><A NAME="item_GetSize"><CODE>GetSize</CODE> ()</A></STRONG><BR> <DD> <PRE> Return memory size of data for the image</PRE> <DT><STRONG><A NAME="item_GetBits"><CODE>GetBits</CODE> ()</A></STRONG><BR> <DD> <PRE> Return data of the image</PRE> <DT><STRONG><A NAME="item_IsTransparent"><CODE>IsTransparent</CODE> ()</A></STRONG><BR> <DD> <PRE> Image is transparent.</PRE> <DT><STRONG><A NAME="item_GetImageType"><CODE>GetImageType</CODE> ()</A></STRONG><BR> <DD> <PRE> Return image type.</PRE> </DL> <P> <H2><A NAME="dibitmap and gd">DIBitmap and GD</A></H2> <DL> <DT><STRONG><A NAME="item_newFromGD"><CODE>newFromGD</CODE> (gd, newGD=0)</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a GD image New object have same size and format, gd image copy into.</PRE> <PRE> Flag newGD is for new GD version (> 2.0) with trueColor bitmap. Default value force 8 bit bitmap.</PRE> <DT><STRONG><A NAME="item_CopyFromGD"><CODE>CopyFromGD</CODE> (gd, newGD=0)</A></STRONG><BR> <DD> <PRE> Copy GD image into Win32::GUI::DIBitmap. GD and Win32::GUI::DIBitmap must have same size and format.</PRE> <DT><STRONG><A NAME="item_CopyToGD"><CODE>CopyToGD</CODE> (gd, newGD=0)</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap into GD image. GD and Win32::GUI::DIBitmap must have same size and format.</PRE> </DL> <P> <H2><A NAME="dibitmap pixels and background methods">DIBitmap Pixels and Background methods</A></H2> <DL> <DT><STRONG><A NAME="item_GetPixel"><CODE>GetPixel</CODE> (x, y)</A></STRONG><BR> <DD> <PRE> Return pixel value color at x, y or undef if error. For image with BPP <= 8 return palette index color. For image with BPP > 8 return color value. This color value can be an integer value or a [B,G,R,A] array.</PRE> <DT><STRONG><A NAME="item_SetPixel"><CODE>SetPixel</CODE> (x, y, color | Blue, Green, Red, [Alpha])</A></STRONG><BR> <DD> <PRE> Set pixel value color at x, y. Return boolean value. For image with BPP <= 8, it's palette color index. For image with BPP > 8, arguments can an integer color value or B,G,R,[A] values.</PRE> <DT><STRONG><A NAME="item_HasBackgroundColor"><CODE>HasBackgroundColor</CODE> ()</A></STRONG><BR> <DD> <PRE> Indicate if image have Background Color.</PRE> <DT><STRONG><A NAME="item_GetBackgroundColor"><CODE>GetBackgroundColor</CODE> ()</A></STRONG><BR> <DD> <PRE> Return Background Color or undef if error. This color value can be an integer value or a [B,G,R,A] array.</PRE> <DT><STRONG><A NAME="item_SetBackgroundColor"><CODE>SetBackgroundColor</CODE> (color | Blue, Green, Red, [Alpha])</A></STRONG><BR> <DD> <PRE> Set Background Color. Return boolean value.</PRE> </DL> <P> <H2><A NAME="dibitmap convertion methods">DIBitmap Convertion methods</A></H2> <DL> <DT><STRONG><A NAME="item_ConvertToBitmap"><CODE>ConvertToBitmap</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new Win32::GUI::Bitmap.</PRE> <DT><STRONG><A NAME="item_ConvertTo4its"><CODE>ConvertTo4its</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 4 bits Win32::GUI::DIBitmap.</PRE> <DT><STRONG><A NAME="item_ConvertTo8Bits"><CODE>ConvertTo8Bits</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 8 bits (grayscale) Win32::GUI::DIBitmap. See ColorQuantize for convert to 8 bits colors.</PRE> <DT><STRONG><A NAME="item_ConvertTo16Bits555"><CODE>ConvertTo16Bits555</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 16 bits Win32::GUI::DIBitmap (555 format).</PRE> <DT><STRONG><A NAME="item_ConvertTo16Bits565"><CODE>ConvertTo16Bits565</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 16 bits Win32::GUI::DIBitmap (565 format).</PRE> <DT><STRONG><A NAME="item_ConvertTo24Bits"><CODE>ConvertTo24Bits</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 24 bits Win32::GUI::DIBitmap.</PRE> <DT><STRONG><A NAME="item_ConvertTo32Bits"><CODE>ConvertTo32Bits</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 32 bits Win32::GUI::DIBitmap.</PRE> <DT><STRONG><A NAME="item_ColorQuantize"><CODE>ColorQuantize</CODE> ([flag = FIQ_WUQUANT])</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 8 bits (colorscale) Win32::GUI::DIBitmap. None 24 bits image are converted to 24bits before.</PRE> <PRE> Flag possible value : FIQ_WUQUANT = Xiaolin Wu color quantization algorithm FIQ_NNQUANT = NeuQuant neural-net quantization algorithm by Anthony Dekker</PRE> <DT><STRONG><A NAME="item_Threshold"><CODE>Threshold</CODE> (T)</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 1 bit Win32::GUI::DIBitmap using a Threshold between 0..255.</PRE> <DT><STRONG><A NAME="item_Dither"><CODE>Dither</CODE> ([flag = FID_FS])</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 1 bit Win32::GUI::DIBitmap.</PRE> <PRE> Flag possible value : FID_FS = Floyd and Steinberg error diffusion algorithm. FID_BAYER4x4 = Bayer ordered dispersed dot dithering (order 2 - 4*4 matrix) FID_BAYER8x8 = Bayer ordered dispersed dot dithering (order 3 - 8*8 matrix) FID_CLUSTER6x6 = Ordered clustered dot dithering (order 3 - 6*6 matrix) FID_CLUSTER8x8 = Ordered clustered dot dithering (order 4 - 8*8 matrix) FID_CLUSTER16x16 = Ordered clustered dot dithering (order 8 - 16*16 matrix)</PRE> <DT><STRONG><A NAME="item_ConvertToStandardType"><CODE>ConvertToStandardType</CODE> ([scale_linear=TRUE])</A></STRONG><BR> <DD> <DT><STRONG><A NAME="item_ConvertToType"><CODE>ConvertToType</CODE> (type, [scale_linear=TRUE])</A></STRONG><BR> <DD> <PRE> For type see new method.</PRE> </DL> <P> <H2><A NAME="dibitmap rotating and flipping">DIBitmap Rotating and flipping</A></H2> <DL> <DT><STRONG><A NAME="item_Rotate"><CODE>Rotate</CODE> (angle)</A></STRONG><BR> <DD> <PRE> Create a new rotated Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> This function rotates an 8-bit greyscale, 24- or 32-bit image by means of 3 shears. The angle of rotation is specified by the angle parameter in degrees. Rotation occurs around the center of the image area. Rotated image retains size and aspect ratio of source image (destination image size is usually bigger), so that this function should be used when rotating an image by 90°, 180° or 270°.</PRE> <DT><STRONG><A NAME="item_RotateEx"><CODE>RotateEx</CODE> (angle, x_shift, y_shift, x_origin, y_origin, use_mask)</A></STRONG><BR> <DD> <PRE> Create a new rotated/translated Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> This function performs a rotation and / or translation of an 8-bit greyscale, 24- or 32-bit image, using a 3rd order (cubic) B-Spline. The rotated image will have the same width and height as the source image, so that this function is better suited for computer vision and robotics. The angle of rotation is specified by the angle parameter in degrees. Horizontal and vertical image translations (in pixel units) are specified by the x_shift and y_shift parameters. Rotation occurs around the center specified by x_origin and y_origin, also given in pixel units. When use_mask is set to TRUE, the irrelevant part of the image is set to a black color, otherwise, a mirroring technique is used to fill irrelevant pixels.</PRE> <DT><STRONG><A NAME="item_FlipHorizontal"><CODE>FlipHorizontal</CODE> ()</A></STRONG><BR> <DD> <PRE> Flip DIBitmap dib horizontally along the vertical axis.</PRE> <DT><STRONG><A NAME="item_FlipVertical"><CODE>FlipVertical</CODE> ()</A></STRONG><BR> <DD> <PRE> Flip DIBitmap vertically along the horizontal axis.</PRE> </DL> <P> <H2><A NAME="dibitmap upsampling / downsampling">DIBitmap UpSampling / DownSampling</A></H2> <DL> <DT><STRONG><A NAME="item_Rescale"><CODE>Rescale</CODE> (new_width, new_heigth, filter=FILTER_BOX)</A></STRONG><BR> <DD> <PRE> Create a new size Win32::GUI::DIBitmap (32 bits only)</PRE> <PRE> This function performs resampling (or scaling, zooming) of a 32-bit image to the desired destination width and height. Resampling refers to changing the pixel dimensions (and therefore display size) of an image. When you downsample (or decrease the number of pixels), information is deleted from the image. When you upsample (or increase the number of pixels), new pixels are added based on color values of existing pixels. You specify an interpolation filter to determine how pixels are added or deleted.</PRE> <PRE> The following filters can be used as resampling filters: FILTER_BOX = Box, pulse, Fourier window, 1st order (constant) B-Spline FILTER_BILINEAR = Bilinear filter FILTER_BSPLINE = 4th order (cubic) B-Spline FILTER_BICUBIC = Mitchell and Netravali's two-param cubic filter FILTER_CATMULLROM = Catmull-Rom spline, Overhauser spline FILTER_LANCZOS3 = Lanczos-windowed sinc filter</PRE> </DL> <P> <H2><A NAME="dibitmap color manipulation">DIBitmap Color manipulation</A></H2> <DL> <DT><STRONG><A NAME="item_AdjustGamma"><CODE>AdjustGamma</CODE> (gamma)</A></STRONG><BR> <DD> <PRE> Adjust Gamma of Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> The gamma parameter represents the gamma value to use (gamma > 0). A value of 1.0 leaves the image alone, less than one darkens it, and greater than one lightens it.</PRE> <DT><STRONG><A NAME="item_AdjustBrightness"><CODE>AdjustBrightness</CODE> (percentage)</A></STRONG><BR> <DD> <PRE> Adjust Brightness of Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> Adjusts the brightness of a 8-, 24- or 32-bit image by a certain amount. This amount is given by the percentage parameter, where percentage is a value between [-100..100]. A value 0 means no change, less than 0 will make the image darker and greater than 0 will make the image brighter.</PRE> <DT><STRONG><A NAME="item_AdjustContrast"><CODE>AdjustContrast</CODE> (percentage)</A></STRONG><BR> <DD> <PRE> Adjust ContrastCreate of Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> Adjusts the contrast of a 8-, 24- or 32-bit image by a certain amount. This amount is given by the percentage parameter, where percentage is a value between [-100..100]. A value 0 means no change, less than 0 will decrease the contrast and greater than 0 will increase the contrast of the image.</PRE> <DT><STRONG><A NAME="item_Invert"><CODE>Invert</CODE> ()</A></STRONG><BR> <DD> <PRE> Inverts each pixel data.</PRE> <DT><STRONG><A NAME="item_GetHistogram"><CODE>GetHistogram</CODE> (channel)</A></STRONG><BR> <DD> <PRE> Return a histogram array[0..255] of a Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> Computes the image histogram. For 24-bit and 32-bit images, histogram can be computed from red, green, blue and black channels. For 8-bit images, histogram is computed from the black channel.</PRE> </DL> <P> <H2><A NAME="dibitmap channel methods">DIBitmap Channel methods</A></H2> <DL> <DT><STRONG><A NAME="item_Channel_Constante"><CODE>Channel Constante</CODE></A></STRONG><BR> <DD> <PRE> FICC_RGB = 0 : Use red, green and blue channels FICC_RED = 1 : Use red channel FICC_GREEN = 2 : Use green channel FICC_BLUE = 3 : Use blue channel FICC_ALPHA = 4 : Use alpha channel FICC_BLACK = 5 : Use black channel FICC_REAL = 6 : Complex images: use real part FICC_IMAG = 7 : Complex images: use imaginary part FICC_MAG = 8 : Complex images: use magnitude FICC_PHASE = 9 : Complex images: use phase</PRE> <DT><STRONG><A NAME="item_GetChannel"><CODE>GetChannel</CODE> (channel)</A></STRONG><BR> <DD> <PRE> Return a 8bits channel Win32::GUI::DIBitmap.</PRE> <PRE> Retrieves the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the color channel to extract.</PRE> <PRE> 24,32 only</PRE> <DT><STRONG><A NAME="item_SetChannel"><CODE>SetChannel</CODE> (channel, 8bit_image)</A></STRONG><BR> <DD> <PRE> Set the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the color channel to set.</PRE> <PRE> 24,32 only</PRE> <DT><STRONG><A NAME="item_GetComplexChannel"><CODE>GetComplexChannel</CODE> (channel)</A></STRONG><BR> <DD> <PRE> Return a complex channel Win32::GUI::DIBitmap.</PRE> <PRE> Retrieves the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the color channel to extract.</PRE> <PRE> 24,32 only</PRE> <DT><STRONG><A NAME="item_SetComplexChannel"><CODE>SetComplexChannel</CODE> (channel, 8bit_image)</A></STRONG><BR> <DD> <PRE> Set the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the complex channel to set.</PRE> <PRE> 24,32 only</PRE> </DL> <P> <H2><A NAME="dibitmap copy/paste methods">DIBitmap Copy/Paste methods</A></H2> <DL> <DT><STRONG><A NAME="item_Clone"><CODE>Clone</CODE> ()</A></STRONG><BR> <DD> <PRE> Clone a Win32::GUI::DIBitmap to a new Win32::GUI::Bitmap.</PRE> <DT><STRONG><A NAME="item_Copy"><CODE>Copy</CODE> (left, top, right, botton)</A></STRONG><BR> <DD> <PRE> Return a new Win32::GUI::Bitmap with a sub part Win32::GUI::DIBitmap (8, 16, 24 or 32 only).</PRE> <PRE> Left specifies the left position of the cropped rectangle. Top specifies the top position of the cropped rectangle. Right specifies the right position of the cropped rectangle. Bottom specifies the bottom position of the cropped rectangle.</PRE> <DT><STRONG><A NAME="item_Paste"><CODE>Paste</CODE> (source_image, left, top, alpha)</A></STRONG><BR> <DD> <PRE> Returns TRUE if successful, FALSE otherwise ( 8, 16, 24 or 32 only).</PRE> <PRE> Alpha blend or combine a sub part image with the current dib image. The bit depth must be greater than or equal to the bit depth of source image.</PRE> <PRE> Alpha is alpha blend factor. The source and destination images are alpha blended if alpha=0..255. If alpha > 255, then the source image is combined to the destination image.</PRE> <DT><STRONG><A NAME="item_Composite"><CODE>Composite</CODE> ([useFileBkg=FALSE, imageBkg=undef appBkColor=undef)</A></STRONG><BR> <DD> </DL> <P> <H2><A NAME="dibitmap devise context methods">DIBitmap Devise Context methods</A></H2> <DL> <DT><STRONG><A NAME="item_CopyToDC"><CODE>CopyToDC</CODE> (hdc, [xd=0, yd=0, w=0, h=0, xs=0, ys=0])</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC.</PRE> <PRE> Specify the destination rectangle with xd,yd,w,h option. Specify the begining of the image with xs,ys option. The image copy keep the same size.</PRE> <DT><STRONG><A NAME="item_AlphaCopyToDC"><CODE>AlphaCopyToDC</CODE> (hdc, [xd=0, yd=0, w=0, h=0, xs=0, ys=0])</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC with transparency / alpha channel support.</PRE> <PRE> Specify the destination rectangle with xd,yd,w,h option. Specify the begining of the image with xs,ys option. The image copy keep the same size.</PRE> <DT><STRONG><A NAME="item_StretchToDC"><CODE>StretchToDC</CODE> (hdc, [xd=0, yd=0, wd=0, hd=0, xs=0, ys=0, ws=0, hs=0, flag=SRCCOPY])</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC.</PRE> <PRE> Specify the destination rectangle with xd,yd,wd,hd option. Specify the image source rectangle ith xs,ys,ws,hs option. The image copy is resize if necessary.</PRE> <PRE> For flag option, see StretchDIBits win32 function.</PRE> <DT><STRONG><A NAME="item_AlphaStretchToDC"><CODE>AlphaStretchToDC</CODE> (hdc, [xd=0, yd=0, wd=0, hd=0, xs=0, ys=0, ws=0, hs=0)</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC with transparency / alpha channel support.</PRE> <PRE> Specify the destination rectangle with xd,yd,wd,hd option. Specify the image source rectangle ith xs,ys,ws,hs option. The image copy is resize if necessary.</PRE> </DL> <P> <HR> <H1><A NAME="mdibitmap object">MDIBITMAP OBJECT</A></H1> <P> <H2><A NAME="mdibitmap new methods">MDIBitmap New methods</A></H2> <DL> <DT><STRONG><CODE>new</CODE> (filename, fif=-1, keep_cache_in_memory=0)</STRONG><BR> <DD> <PRE> Create a new Win32::GUI::MDIBBitmap in edit mode.</PRE> <DT><STRONG><CODE>newFromFile</CODE> (filename, read_only=1, keep_cache_in_memory=0)</STRONG><BR> <DD> <PRE> Create a Win32::GUI::MDIBBitmap from a image file.</PRE> </DL> <P> <H2><A NAME="mdibitmap get methods">MDIBitmap Get methods</A></H2> <DL> <DT><STRONG><A NAME="item_GetPageCount"><CODE>GetPageCount</CODE></A></STRONG><BR> <DD> <PRE> Return page count.</PRE> <DT><STRONG><A NAME="item_GetLockedPageNumbers"><CODE>GetLockedPageNumbers</CODE></A></STRONG><BR> <DD> <PRE> Return a list of locked page index.</PRE> </DL> <P> <H2><A NAME="mdibitmap lock methods">MDIBitmap Lock methods</A></H2> <DL> <DT><STRONG><A NAME="item_LockPage"><CODE>LockPage</CODE> ([index = 0])</A></STRONG><BR> <DD> <PRE> Lock and return a page (Win32::GUI::DIBitmap object).</PRE> <DT><STRONG><A NAME="item_UnlockPage"><CODE>UnlockPage</CODE> (Win32::GUI::DIBitmap, [update = 0])</A></STRONG><BR> <DD> <PRE> Unlock a locked page (Win32::GUI::DIBitmap object). Update indicate if the page must be updated.</PRE> </DL> <P> <H2><A NAME="mdibitmap edit methods">MDIBitmap Edit methods</A></H2> <DL> <DT><STRONG><A NAME="item_AppendPage"><CODE>AppendPage</CODE> (Win32::GUI::DIBitmap)</A></STRONG><BR> <DD> <PRE> Append a Win32::GUI::DIBitmap to a Win32::GUI::MDIBBitmap.</PRE> <DT><STRONG><A NAME="item_InsertPage"><CODE>InsertPage</CODE> (Win32::GUI::DIBitmap, [index = 0])</A></STRONG><BR> <DD> <PRE> Insert a Win32::GUI::DIBitmap in a Win32::GUI::MDIBBitmap.</PRE> <DT><STRONG><A NAME="item_DeletePage"><CODE>DeletePage</CODE> ([index = 0])</A></STRONG><BR> <DD> <PRE> Delete a page from a Win32::GUI::MDIBBitmap.</PRE> <DT><STRONG><A NAME="item_MovePage"><CODE>MovePage</CODE> (to_index, [from_index = 0])</A></STRONG><BR> <DD> <PRE> Move a page in a Win32::GUI::MDIBBitmap.</PRE> </DL> <P> <HR> <H1><A NAME="author">AUTHOR</A></H1> <PRE> Laurent Rocher (lr...@cp...) HomePage : <A HREF="http://perso.club-internet.fr/rocherl/Win32GUI.html">http://perso.club-internet.fr/rocherl/Win32GUI.html</A></PRE> <P> <HR> <H1><A NAME="see also">SEE ALSO</A></H1> <P>Win32::GUI</P> </BODY> </HTML> --- NEW FILE: MANIFEST --- Readme Changes DIBitmap.pm DIBitmap.xs TYPEMAP Makefile.PL MANIFEST --- NEW FILE: Changes --- Revision history for Perl extension FreeImage. 0.15 28 / 11 / 2004 - Use FreeImage 3.5.1 (GIF support and LZW compression, improvements, bug fix, ...) - New Win32::GUI::DIBitmap method -> GetFIFMimeType -> ConvertTo4Bits 0.14 21 / 02 / 2004 - Use FreeImage 3.2.0 - New Win32::GUI::DIBitmap method -> Image internal format -> Pixel and and Background methods + SetPixel + GetPixel + HasBackgroundColor + GetBackgroundColor + SetBackgroundColor -> Conversion with new internal type -> Chanel processing + GetComplexChannel + SetComplexChannel 0.13 08 / 12 / 2003 - Correct memory leak in NewFromWindow, newFromDC [Thank to Steve Pick] 0.12 17 / 11 / 2003 - Use FreeImage 3.0.4 0.11 11 / 11 / 2003 - Use FreeImage 3.0.3 0.10 28 / 10 / 2003 - Use FreeImage 3.0.2 0.09 24 / 10 / 2003 - Use FreeImage 3.0.1 0.08 28 / 09 / 2003 - Use FreeImage 3.0.0 - New format : XBM, XPM - New Win32::GUI::DIBitmap method -> Conversion + Threshold : Convert to 1 bit + Dither : Convert to 1 bit -> Color manipulation + AdjustGamma + AdjustBrightness + AdjustContrast + Invert : Invert effect + GetHistogram : Get Color histogram -> Chanel processing + GetChannel + SetChannel -> Copy/Paste + Copy + Paste -> Rotation / flipping + Rotate : Create a rotated Bitmap (>= 8 bits only) + RotateEx : Create a rotated/translated Bitmap (>= 8 bits only) + FlipVerticaly : Flip Verticaly effect + FlipHorizontaly : Flip Horizontaly effect -> UpSampling / DownSampling + Rescale : Create a rescaled Bitmap (32 bits only) - New TIFF save format option. - New sample : read image from zipfile. 0.07 24 / 04 / 2003 - New Win32::GUI::DIBitmap method + newFromGD + CopyFromGD, CopyToGD : Must have Same Size and BPP. - UPDATE 1 : Add switch for old GD version - UPDATE 2 : Correct upside down bitmap bug 0.06 28 / 05 / 2002 - Use FreeImage 2.5.3 - Add FreeImage Multipaging interface 0.05 14 / 01 / 2002 - Use FreeImage 2.5.0 - Add FreeImage Multipaging interface (experimental in this release) - New Win32::GUI::DIBitmap method + Clone + AlphaCopyToDC + AlphaStrechToDC 0.04 29 / 10 / 2001 - Use FreeImage 2.4.2 - Fix bug in jpeg plug-in 0.03 18 / 08 / 2001 - Correct Bug when capture screen if display isn't in 32 bits - Add new function GetColorType - ColorQuantize work if image isn't in 24 bits - Add more Documentation 0.02 15 / 08 / 2001 - Use FreeImage 2.4.1 - Some little change 0.01 21 / 03 / 2001 - original version; created by h2xs 1.19 - First build Win32::GUI::DIBitmap --- NEW FILE: Readme --- Win32::GUI::DIBitmap 0.14 ========================= Win32::GUI::DIBitmap add new reading/writing bitmap formats to Win32::GUI and some image manipulation. INSTALLATION Download FreeImage source code at http://freeimage.sourceforge.net/ Build the FreeImage static lib with MSVC project. Copy the FreeImage.lib and FreeImage.h in the extlib directory. To install this module type the following: perl Makefile.PL make make install DEPENDENCIES This module requires these other modules and libraries: Win32::GUI FreeImage lirary (http://freeimage.sourceforge.net/) WEB PAGE AND PPM REPOSITORY See: http://perso.club-internet.fr/rocherl/Win32GUI.html COPYRIGHT AND LICENCE Copyright 2003 by Laurent Rocher (lr...@cp...). This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html>. --- NEW FILE: DIBitmap.xs --- /**********************************************************************/ /* D I B i t m a p . x s */ /**********************************************************************/ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #define FREEIMAGE_LIB #include ".\extlib\FreeImage.h" /*--------------------------------------------------------------------*/ // #define IO_HANDLER_DEBUG #define BREAK_POINT __asm { int 3 }; /*--------------------------------------------------------------------*/ [...2810 lines suppressed...] ################################################################## ################################################################## # # Free routine # # # DESTROY # void DESTROY(mdib) Win32::GUI::MDIBitmap mdib CODE: FreeImage_CloseMultiBitmap(mdib); # # ################################################################## --- NEW FILE: DIBitmap.pm --- package Win32::GUI::DIBitmap; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp 'croak','carp'; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw ( FIF_UNKNOWN FIF_BMP FIF_CUT [...1022 lines suppressed...] Insert a Win32::GUI::DIBitmap in a Win32::GUI::MDIBBitmap. =item C<DeletePage> ([index = 0]) Delete a page from a Win32::GUI::MDIBBitmap. =item C<MovePage> (to_index, [from_index = 0]) Move a page in a Win32::GUI::MDIBBitmap. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage : http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut --- NEW FILE: TYPEMAP --- TYPEMAP LPCTSTR T_PV LPCSTR T_PV LPTSTR T_PV DWORD T_IV UINT T_IV BOOL T_IV FREE_IMAGE_FORMAT T_IV FREE_IMAGE_QUANTIZE T_IV FREE_IMAGE_COLOR_TYPE T_IV FREE_IMAGE_DITHER T_IV FREE_IMAGE_FILTER T_IV FREE_IMAGE_COLOR_CHANNEL T_IV FREE_IMAGE_TYPE T_IV Win32::GUI::DIBitmap T_PTROBJ Win32::GUI::DIBitmap::Ext T_PTROBJ Win32::GUI::MDIBitmap T_PTROBJ HBITMAP T_HANDLE HDC T_HANDLE HWND T_HANDLE GD::Image T_PTROBJ ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { if(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0) != NULL) $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0))); else $var = NULL; } else $var = ($type) SvIV($arg); ################################################################################ OUTPUT T_HANDLE sv_setiv($arg, (IV) $var); |
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157/samples Added Files: INFO2.PL Zapotec.zip demo.pl demo2.pl info.pl piv.pl test1.pl test10.pl test11.pl test12.pl test13.pl test14.pl test15.pl test2.pl test3.pl test4.pl test5.pl test6.pl test7.pl test8.pl test9.pl zipimage.PL Log Message: Added to repository --- NEW FILE: test11.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - CopyToDC # - AlphaCopyToDC # - AlphaStretchToDC use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $dibalpha = newFromFile Win32::GUI::DIBitmap ('bmp/small.tga') or die "newFromFile"; print "transparent : ", $dibalpha->IsTransaparent(), "\n"; print "BPP : ", $dibalpha->GetBPP(), "\n"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 10, 10, $width - 20, $height - 20); $dibalpha->CopyToDC($dc); $dibalpha->AlphaCopyToDC($dc, 200); $dibalpha->AlphaStretchToDC($dc, 0, 200, 260, 200 ); } --- NEW FILE: info.pl --- #perl -w use Win32::GUI::DIBitmap; print Win32::GUI::DIBitmap::GetVersion(), "\n"; print Win32::GUI::DIBitmap::GetCopyright(), "\n"; $count = Win32::GUI::DIBitmap::GetFIFCount(); print "Format\tReading\tWriting\tDescription\n"; for ($fif = 0; $fif < $count; $fif++) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($fif); $desc = Win32::GUI::DIBitmap::FIFDescription($fif); $read = "N"; $read = "Y" if (Win32::GUI::DIBitmap::FIFSupportsReading($fif)); $write = "N"; $write = "Y" if (Win32::GUI::DIBitmap::FIFSupportsWriting($fif)); $export = ""; $export .= " 1" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 1)); $export .= " 4" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 4)); $export .= " 8" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 8)); $export .= " 16" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 16)); $export .= " 24" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 24)); $export .= " 32" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 32)); $export = " [Export =$export]" unless ($export eq ""); print "$format\t$read\t$write\t$desc$export\n"; } --- NEW FILE: test4.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromFile # - ConvertToBitmap use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; $dib = newFromFile Win32::GUI::DIBitmap ("bmp/zapotec.jpg") or die "Load zapotec.jpg"; $hbitmap = $dib->ConvertToBitmap(); undef $dib; # $hbitmap = new Win32::GUI::Bitmap('bmp/zapotec.bmp') or die ("new Bitmap"); $BITMAP = $W->AddLabel ( -pos => [0 , 0], -size => [$width, $height], -bitmap => $hbitmap, -name => "Bitmap", -visible => 1, ); $BITMAP->SetImage ($hbitmap); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { $W->Bitmap->Resize($W->ScaleWidth, $W->ScaleHeight); } sub Window_Terminate { $W->PostQuitMessage(0); } --- NEW FILE: test1.pl --- #perl -w # # Test standalone : # # Functions Test : # - GetVersion # - GetCopyright # - GetFIFCount # - GetFormatFromFIF # - GetFIFFromFormat # - FIFExtensionList # - FIFDescription # - FIFRegExpr # - FIFSupportsWriting # - FIFSupportsReading # - new # - SaveToFile use Win32::GUI::DIBitmap; print Win32::GUI::DIBitmap::GetVersion(), "\n"; print Win32::GUI::DIBitmap::GetCopyright(), "\n"; $count = Win32::GUI::DIBitmap::GetFIFCount(); print "count = $count\n"; for ($i = 0; $i < $count; $i++) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($i); $fif = Win32::GUI::DIBitmap::GetFIFFromFormat($format); $ext = Win32::GUI::DIBitmap::FIFExtensionList($fif); $desc = Win32::GUI::DIBitmap::FIFDescription($fif); $reg = Win32::GUI::DIBitmap::FIFRegExpr($fif); $read = Win32::GUI::DIBitmap::FIFSupportsReading($fif); $write = Win32::GUI::DIBitmap::FIFSupportsWriting($fif); print "$i : Format = $format FIF = $fif Extention = $ext Description = $desc RegExp = $reg Reading = $read Writing = $write\n"; } $dib = new Win32::GUI::DIBitmap (100,100,24,255,255,255); for ($i = 0; $i < $count; $i++) { ($ext, $misc) = split /,/, Win32::GUI::DIBitmap::FIFExtensionList($i), 2; $f = "res$i.$ext"; $res = $dib->SaveToFile($f, $i); print "save $f = $res\n"; unlink $f; } --- NEW FILE: test13.pl --- #perl -w # # Test with Win32::GUI and GD # # Functions Test : # - newFromGD # - CopyFromGD # - StretchToDC use GD; use Win32::GUI; use Win32::GUI::DIBitmap; # create a new image $im = new GD::Image(100,100); # allocate some colors $white = $im->colorAllocate(255,255,255); $black = $im->colorAllocate(0,0,0); $red = $im->colorAllocate(255,0,0); $blue = $im->colorAllocate(0,0,255); $green = $im->colorAllocate(0,255,0); # make the background transparent and interlaced $im->transparent($white); $im->interlaced('true'); # Put a black frame around the picture $im->rectangle(0,0,99,99,$black); # Draw a blue oval $im->arc(50,50,95,75,0,360,$blue); $im->string(gdSmallFont,2,10,"Top",$black); # And fill it with red $im->fill(50,50,$red); $color = 0; # Allocate a DIBitmap and copy GD image (no inflate/deflate) $dib = newFromGD Win32::GUI::DIBitmap ($im) or die "newFromData"; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [200, 230], -name => "Window", ) or die "new Window"; $W->AddButton ( -name => "BtnColor", -pos => [0, 0], -size => [200, 20], -text => "Change Color !!!" ) or die "new AddButton"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { ($width, $height) = ($W->GetClientRect)[2..3]; $W->BtnColor->Resize($width, 20); Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 0, 30, $width, $height - 30); } sub BtnColor_Click { # Change color if ($color) { $im->fill(50,50,$red); print "Color change to red \n"; } else { $im->fill(50,50,$green); print "Color change to green\n"; } # Copy GD data only (no allocation, no inflate/deflate) $dib->CopyFromGD($im); $color = 1 - $color; Paint(); } --- NEW FILE: Zapotec.zip --- (This appears to be a binary file; contents omitted.) --- NEW FILE: test2.pl --- #perl -w # # Test standalone : Load and save in different format # # Functions Test : # - GetVersion # - GetCopyright # - newFromFile # - SaveToFile # use Cwd; use Win32::GUI::DIBitmap; print Win32::GUI::DIBitmap::GetVersion(), "\n"; print Win32::GUI::DIBitmap::GetCopyright(), "\n"; $dir_in = cwd(); $dir_in .= "/bmp/"; $dir_in =~ tr/\//\\/; $dir_out = cwd(); $dir_out .= "/"; $dir_out =~ tr/\//\\/; chdir $dir_in; opendir (REP, $dir_in) or die "error opendir"; @Fichier = grep { -f $_ } readdir (REP); closedir (REP); $i = 0; foreach $fichier (@Fichier) { $i ++; print $dir_in.$fichier, "\n"; $dib = Win32::GUI::DIBitmap->newFromFile ($dir_in.$fichier); if (defined $dib) { $f = $dir_out.$i.".bmp"; $dib->SaveToFile($f); undef $dib; } } --- NEW FILE: test7.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - StretchToDC use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 10, 10, $width - 20, $height - 20); $dib->StretchToDC($dc); $dib->StretchToDC($dc, 0, ($height / 2) - 30, 50, 50); $dib->StretchToDC($dc, 0, $height - 50 , 50, 50, 20, 20, 20, 20); } --- NEW FILE: demo2.pl --- #perl -w ####################################################################### # # Perl Image Viewer # ####################################################################### use strict; use Cwd; use Win32::GUI; use Win32::GUI::DIBitmap; my @PIVReadFilter; my $PIVDirectory; my $PIVDib; PIVInit (); my $Menu = Win32::GUI::MakeMenu( "&File" => "File", " > &Open..." => "FileOpen", " > -" => 0, " > &Directory..." => "FileDirectory", " > -" => 0, " > E&xit" => "FileExit", ); my $Window = new Win32::GUI::Window ( -name => "Window", -title => "Perl Image Viewer Demo", -pos => [100, 100], -size => [400, 400], -menu => $Menu, ); # $Window->AddGraphic ( Win32::GUI::Graphic->new ($Window, -name => "Graphic", -pos => [0, 0], -size => [$Window->ScaleWidth,$Window->ScaleHeight], ); $Window->Show(); Win32::GUI::Dialog(); ####################################################################### # # PIV Functions # ####################################################################### sub PIVInit { # # Init PIVLoadFilter and PIVSaveFilter # my %ReadFilter; my $count = Win32::GUI::DIBitmap::GetFIFCount(); my $liste = ""; for (my $fif = 0; $fif < $count; $fif++) { my $ext = Win32::GUI::DIBitmap::FIFExtensionList($fif); my $desc = Win32::GUI::DIBitmap::FIFDescription($fif); my $read = Win32::GUI::DIBitmap::FIFSupportsReading($fif); my $write = Win32::GUI::DIBitmap::FIFSupportsWriting($fif); $desc .= " (*." . join (',*.', split ( ',', $ext)) . ")"; $ext = "*." . join (';*.', split ( ',', $ext)); if (Win32::GUI::DIBitmap::FIFSupportsReading($fif)) { $ReadFilter {"$desc"} = $ext; $liste .= ";$ext"; } } $ReadFilter {"All PIV Files"} = $liste; foreach my $i (sort keys %ReadFilter) { push @PIVReadFilter, $i, $ReadFilter{$i}; } # # init PIVDirectory # $PIVDirectory = cwd(); $PIVDirectory =~ tr/\//\\/; } sub PIVAdjustDisplay { if (defined $PIVDib) { my $w = $Window->Width - $Window->ScaleWidth; my $h = $Window->Height - $Window->ScaleHeight; $Window->Resize ($PIVDib->Width + $w, $PIVDib->Height + $h); } } sub PIVFinish { undef $PIVDib; return -1; } ####################################################################### # # Window Event # ####################################################################### sub Window_Terminate { return PIVFinish(); } sub Window_Resize { $Window->Graphic->Resize ($Window->ScaleWidth, $Window->ScaleHeight); } ####################################################################### # # Graphic Event # ####################################################################### sub Graphic_Paint { my $DC = $Window->Graphic->GetDC(); if (defined $PIVDib) { $PIVDib->CopyToDC($DC); } $DC->Validate(); } ####################################################################### # # File Menu # ####################################################################### sub FileOpen_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Open Image File", -filter => \@PIVReadFilter, -directory => $PIVDirectory, ); if ($ret) { undef $PIVDib; $PIVDib = newFromFile Win32::GUI::DIBitmap ($ret); PIVAdjustDisplay (); } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetOpenFileName Error"); } } sub FileDirectory_Click { my $ret = Win32::GUI::BrowseForFolder ( -title => "Select default directory", -directory => $PIVDirectory, -folderonly => 1, ); $PIVDirectory = $ret if ($ret); } sub FileExit_Click { return PIVFinish(); } --- NEW FILE: test8.pl --- #perl -w # # Test with Win32::GUI and GD # # Functions Test : # - newFromData # - StretchToDC use GD; use Win32::GUI; use Win32::GUI::DIBitmap; # create a new image $im = new GD::Image(100,100); # allocate some colors $white = $im->colorAllocate(255,255,255); $black = $im->colorAllocate(0,0,0); $red = $im->colorAllocate(255,0,0); $blue = $im->colorAllocate(0,0,255); # make the background transparent and interlaced $im->transparent($white); $im->interlaced('true'); # Put a black frame around the picture $im->rectangle(0,0,99,99,$black); # Draw a blue oval $im->arc(50,50,95,75,0,360,$blue); # And fill it with red $im->fill(50,50,$red); $dib = newFromData Win32::GUI::DIBitmap ($im->png) or die "newFromData"; undef $im; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [200, 200], -name => "Window", ) or die "new Window"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 0, 0, $width, $height); } --- NEW FILE: zipimage.PL --- #perl -v # # Load image from a zip file. # use Win32::GUI; use Win32::GUI::DIBitmap; use Archive::Zip; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap load from a zipfile", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; # Open Zipfile $zip = Archive::Zip->new( 'zapotec.zip' ) or die "ZipFile"; # Open image file in zipfile $member = $zip->memberNamed( 'Zapotec.JPG' ) or die "member ZipFile"; # Load data image in memory $data = $member->contents(); # Load data immage in a dibbitmap $dib = newFromData Win32::GUI::DIBitmap ($data) or die "Load zapotec.jpg"; $hbitmap = $dib->ConvertToBitmap(); undef $member; undef $zip; undef $data; undef $dib; $BITMAP = $W->AddLabel ( -pos => [0 , 0], -size => [$width, $height], -bitmap => $hbitmap, -name => "Bitmap", -visible => 1, ); $BITMAP->SetImage ($hbitmap); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { $W->Bitmap->Resize($W->ScaleWidth, $W->ScaleHeight); } sub Window_Terminate { $W->PostQuitMessage(0); } --- NEW FILE: test10.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromWindow # - SaveToFile use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test : newFromWindow", -pos => [100, 100], -size => [200, 200], -name => "Window", ) or die "new Window"; $button = $W->AddButton ( -name => "Capture1", -text => "Click here for capture this button", -pos => [20, 40], ); $W->AddButton ( -name => "Capture2", -text => "Click here for capture this window", -pos => [20, 80], ); $W->AddButton ( -name => "Capture3", -text => "Click here for capture the screen", -pos => [20, 120], ); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 } sub Capture1_Click { my $dib = newFromWindow Win32::GUI::DIBitmap ($button) or die "newFromWindow"; $dib->SaveToFile ('button0.bmp'); } sub Capture2_Click { my $dib = newFromWindow Win32::GUI::DIBitmap ($W) or die "newFromWindow"; $dib->SaveToFile ('window0.bmp'); $dib = newFromWindow Win32::GUI::DIBitmap ($W, 1) or die "newFromWindow"; $dib->SaveToFile ('window1.bmp'); } sub Capture3_Click { my $hwnd = Win32::GUI::GetDesktopWindow(); my $dib = newFromWindow Win32::GUI::DIBitmap ($hwnd) or die "newFromWindow"; $dib->SaveToFile ('screen.bmp'); $dib->SaveToFile ('screen.png'); $dib->SaveToFile ('screen.jpg'); $dib->SaveToFile ('screen.tif'); } --- NEW FILE: test5.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - ConvertToBitmap # - ConvertTo24Bits # - SaveToFile with fif and flag use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; $hbitmap = new Win32::GUI::Bitmap('bmp/zapotec.bmp') or die ("new Bitmap"); $dib = newFromBitmap Win32::GUI::DIBitmap ($hbitmap) or die "newFromBitmap"; undef $hbitmap; $hbitmap = $dib->ConvertToBitmap() or die "ConvertToBitmap"; $dib->SaveToFile ("test5_1.jpg", FIF_JPEG, JPEG_QUALITYSUPERB ) or die "SaveToFile"; $dib->SaveToFile ("test5_2.jpg", FIF_JPEG, JPEG_QUALITYGOOD ) or die "SaveToFile"; $dib->SaveToFile ("test5_3.jpg", FIF_JPEG, JPEG_QUALITYNORMAL ) or die "SaveToFile"; $dib->SaveToFile ("test5_4.jpg", FIF_JPEG, JPEG_QUALITYAVERAGE) or die "SaveToFile"; $dib->SaveToFile ("test5_5.jpg", FIF_JPEG, JPEG_QUALITYBAD ) or die "SaveToFile"; undef $dib; $BITMAP = $W->AddLabel ( -pos => [0 , 0], -size => [$width, $height], -bitmap => $hbitmap, -name => "Bitmap", -visible => 1, ); $BITMAP->SetImage ($hbitmap); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { $W->Bitmap->Resize($W->ScaleWidth, $W->ScaleHeight); } sub Window_Terminate { $W->PostQuitMessage(0); } --- NEW FILE: test12.pl --- #perl -w # # Test with Win32::GUI and Multi-Page system # # Functions Test : # - newFromFile # - AppendPage # - GetPageCount # - LockPage # - UnlockPage # - GetLockedPageNumbers use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; # Create a MDIB bitmap $mdib = new Win32::GUI::MDIBitmap ("mdib.tiff", FIF_TIFF,) or die "new"; for $i (1..5) { my $dib = newFromFile Win32::GUI::DIBitmap ("bmp/$i.bmp"); $mdib->AppendPage ($dib); } undef $mdib; # Load a MDIB bitmap $mdib = newFromFile Win32::GUI::MDIBitmap ("mdib.tiff") or die "newFromFile"; print "Nb page :", $mdib->GetPageCount(), "\n"; my $i = 0; $Button = $W->AddButton ( -name => "Button", -text => "Next", -visible => 1, -pos => [0 , 0], ); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Button_Click { $i = $i + 1; $i = 0 if ($i >= $mdib->GetPageCount()); print "Current page :", $i, "\n"; Paint(); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); my $dib = $mdib->LockPage($i); print $mdib->GetLockedPageNumbers(), "\n"; $dib->AlphaCopyToDC($dc, 50, 50); $dib->SaveToFile ("test.bmp"); $mdib->UnlockPage($dib); } --- NEW FILE: INFO2.PL --- # perl -v # # Chech save bit support. # 16-32 bits JPEG automaticly converted in SaveToFile # 16 bits PNG automaticly converted in SaveToFile use Win32::GUI::DIBitmap; print "FreeImage ", Win32::GUI::DIBitmap::GetVersion(), "\n"; $count = Win32::GUI::DIBitmap::GetFIFCount(); print "Format\tWriting info\n"; $dib1 = new Win32::GUI::DIBitmap (100,100,1); $dib4 = new Win32::GUI::DIBitmap (100,100,4); $dib8 = new Win32::GUI::DIBitmap (100,100,8); $dib16 = new Win32::GUI::DIBitmap (100,100,16); $dib24 = new Win32::GUI::DIBitmap (100,100,24); $dib32 = new Win32::GUI::DIBitmap (100,100,32); $f = "tmp"; for ($fif = 0; $fif < $count; $fif++) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($fif); $desc = Win32::GUI::DIBitmap::FIFDescription($fif); if (Win32::GUI::DIBitmap::FIFSupportsWriting($fif)) { $write = ''; $write .= "1 " if ( $dib1->SaveToFile($f, $fif) ); unlink $f; $write .= "4 " if ( $dib4->SaveToFile($f, $fif) ); unlink $f; $write .= "8 " if ( $dib8->SaveToFile($f, $fif) ); unlink $f; $write .= "16 " if ( $dib16->SaveToFile($f, $fif) ); unlink $f; $write .= "24 " if ( $dib24->SaveToFile($f, $fif) ); unlink $f; $write .= "32 " if ( $dib32->SaveToFile($f, $fif) ); unlink $f; print "$format\t$write\n"; } } --- NEW FILE: test14.pl --- #perl -w # # Test some effects # use strict; use Win32::GUI; use Win32::GUI::DIBitmap; my $Menu = Win32::GUI::MakeMenu( "&Effect" => "Effect", " > &Restore" => "EffectRestore", " > -" => 0, " > Dither" => "EffectDither", " > Threshold (50)" => "EffectThreshold", " > -" => 0, " > AdjustGamma (0.5)" => "EffectAdjustGamma1", " > AdjustGamma (1.5)" => "EffectAdjustGamma2", " > AdjustBrightness (-50)" => "EffectAdjustBrightness1", " > AdjustBrightness (50)" => "EffectAdjustBrightness2", " > AdjustContrast (-50)" => "EffectAdjustContrast1", " > AdjustContrast (50)" => "EffectAdjustContrast2", " > Invert" => "EffectInvert", " > -" => 0, " > Copy" => "EffectCopy", " > Paste" => "EffectPaste", " > -" => 0, " > Rotate(45)" => "EffectRotate", " > RotateEx(45, 10, 10, 10, 10, 1)" => "EffectRotateEx", " > FlipHorizontal" => "EffectFlipHorizontal", " > FlipVertical" => "EffectFlipVertical", " > -" => 0, " > Rescale (W+10, H+10)" => "EffectRescaleUp", " > Rescale (W-10, H-10)" => "EffectRescaleDown", " > -" => 0, " > E&xit" => "EffectExit", ); my $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", -menu => $Menu, ) or die "new Window"; my $G = Win32::GUI::Graphic->new ($W, -name => "Graphic", -pos => [0, 0], -size => [$W->ScaleWidth,$W->ScaleHeight], ); my $dib; EffectRestore_Click(); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { return -1; } sub Window_Resize { $G->Resize ($W->ScaleWidth, $W->ScaleHeight); } sub Graphic_Paint { my $dc = $G->GetDC(); my ($width, $height) = ($G->GetClientRect)[2..3]; $dib->StretchToDC($dc, 0, 0, $width, $height) if defined $dib; $dc->Validate(); } sub EffectExit_Click { return -1; } sub EffectRestore_Click { $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $dib = $dib->ConvertTo32Bits(); $G->InvalidateRect(1); } sub EffectDither_Click { $dib = $dib->Dither() if defined $dib; $G->InvalidateRect(1); } sub EffectThreshold_Click { $dib = $dib->Threshold(50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustGamma1_Click { $dib->AdjustGamma(0.5) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustGamma2_Click { $dib->AdjustGamma(1.5) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustBrightness1_Click { $dib->AdjustBrightness(-50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustBrightness2_Click { $dib->AdjustBrightness(50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustContrast1_Click { $dib->AdjustContrast(-50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustContrast2_Click { $dib->AdjustContrast(50) if defined $dib; $G->InvalidateRect(1); } sub EffectInvert_Click { $dib->Invert() if defined $dib; $G->InvalidateRect(1); } sub EffectCopy_Click { if (defined $dib and $dib->Width > 20 and $dib->Height > 20) { $dib = $dib->Copy(10,10,$dib->Width-10,$dib->Height-10) or die "Copy"; } $G->InvalidateRect(1); } sub EffectPaste_Click { if (defined $dib and $dib->Width > 20 and $dib->Height > 20) { my $dib2 = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $dib2 = $dib2->Copy(10,10,30,30); $dib->Paste($dib2, 10, 10, 500); } $G->InvalidateRect(1); } sub EffectFlipHorizontal_Click { $dib->FlipHorizontal() if defined $dib; $G->InvalidateRect(1); } sub EffectFlipVertical_Click { $dib->FlipVertical() if defined $dib; $G->InvalidateRect(1); } sub EffectRotate_Click { $dib = $dib->Rotate(45) or die "Rotate" if defined $dib; $G->InvalidateRect(1); } sub EffectRotateEx_Click { $dib = $dib->RotateEx(45,10,10,10,10,1) or die "RotateEx" if defined $dib; $G->InvalidateRect(1); } sub EffectRescaleUp_Click { $dib = $dib->Rescale($dib->Width+10,$dib->Height+10) or die "Rescale" if defined $dib; $G->InvalidateRect(1); } sub EffectRescaleDown_Click { if (defined $dib and $dib->Width > 20 and $dib->Height > 20) { $dib = $dib->Rescale($dib->Width-10,$dib->Height-10) or die "Rescale"; } $G->InvalidateRect(1); } --- NEW FILE: test9.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromDC # - SaveToFile use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test: NewFromDC", -pos => [100, 100], -size => [200, 200], -name => "Window", ) or die "new Window"; $button = $W->AddButton ( -name => "Capture1", -text => "Click here for capture this button", -pos => [20, 40], ); $W->AddButton ( -name => "Capture2", -text => "Click here for capture this window", -pos => [20, 80], ); $W->AddButton ( -name => "Capture3", -text => "Click here for capture the screen", -pos => [20, 120], ); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 } sub Capture1_Click { my $dc = new Win32::GUI::DC ($W); my $dib = newFromDC Win32::GUI::DIBitmap ($dc, 20, 40, $button->Width(), $button->Height()) or die "newFromDC"; $dib->SaveToFile ('button.bmp'); } sub Capture2_Click { my $dc = new Win32::GUI::DC ($W); my $dib = newFromDC Win32::GUI::DIBitmap ($dc) or die "newFromDC"; $dib->SaveToFile ('window.bmp'); } sub Capture3_Click { my $dc = new Win32::GUI::DC ('DISPLAY'); my $dib = newFromDC Win32::GUI::DIBitmap ($dc) or die "newFromDC"; $dib->SaveToFile ('screen.jpg'); } --- NEW FILE: test3.pl --- #perl -w # # Test standalone : # # Functions Test : # - newFromFile # - GetFIFCount # - FIFSupportsWriting # - FIFSupportsReading # - SaveToData # - newFromData # - SaveToFile use Win32::GUI::DIBitmap; $dib = Win32::GUI::DIBitmap->newFromFile ("bmp/zapotec.jpg") or die "Load zapotec.jpg"; $dib = $dib->ConvertTo24Bits(); for ($i = 0; $i < Win32::GUI::DIBitmap::GetFIFCount(); $i++) { if (Win32::GUI::DIBitmap::FIFSupportsWriting($i) && Win32::GUI::DIBitmap::FIFSupportsReading($i) && Win32::GUI::DIBitmap::FIFSupportsExportBPP($i, 24) && $i != 7 && $i != 8 && $i != 11 && $i != 12 && $i != 14 && $i != 15 && $i != 17) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($i); print "Test format = $format\n"; $data = $dib->SaveToData($i) or die " SaveToData $i $format"; $dib2 = Win32::GUI::DIBitmap->newFromData($data) or die " newFromData $i $format"; $dib2->SaveToFile($i.'.bmp') or die "SaveToFile dib2 $i $format"; undef $dib2; undef $data; } } --- NEW FILE: demo.pl --- #perl -w use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [400, 400], -name => "Window", ); $dib = newFromFile Win32::GUI::DIBitmap ('bmp\Zapotec.jpg'); $hbitmap = $dib->ConvertToBitmap(); undef $dib; $W->AddButton ( -pos => [100, 100], -size => [200, 200], -bitmap => $hbitmap, -name => "Button", -visible => 1, ); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 } --- NEW FILE: test15.pl --- #perl -w # # Test with Win32::GUI # use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $bcolor = $dib->HasBackgroundColor(); print "hascolor = $bcolor\n"; $color = $dib->GetPixel(10,10); $color = $dib->GetPixel(10,10); print "Color = $color\n"; $dib->SetPixel(10, 10, 255); $color = $dib->GetPixel(10,10); print "Color = $color\n"; $dib = $dib->ConvertTo24Bits(); print "hascolor = $bcolor\n"; @color = $dib->GetPixel(11,10); print "Color = @color\n"; $dib->SetPixel(11, 10, 255, 0, 0); @color = (0, 255, 0); $dib->SetPixel(12, 10, @color); @color = (0, 0, 255); $dib->SetPixel(13, 10, \@color); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 0, 0, $width, $height); } --- NEW FILE: piv.pl --- #perl -v ####################################################################### # # Perl Image Viewer # ####################################################################### use strict; use Cwd; use Win32::GUI; use Win32::GUI::DIBitmap; my @PIVReadFilter; my @PIVSaveFilter; my $PIVDirectory; my $PIVDib; my $PIVFile = ""; PIVInit (); my $Menu = Win32::GUI::MakeMenu( "&File" => "File", " > &Open..." => "FileOpen", " > -" => 0, " > &Save" => "FileSave", " > &Save As..." => "FileSaveAs", " > -" => 0, " > &Directory..." => "FileDirectory", " > -" => 0, " > E&xit" => "FileExit", "&Image" => "Image", " > &Properties..." => "ImageProperties", " > -" => 0, " > &Convert" => "ImageConvert", " >> &8bits" => "ImageConvert8bits", " >> &16bits" => "ImageConvert16bits", " >> &24bits" => "ImageConvert24bits", " >> &32bits" => "ImageConvert32bits", " > -" => 0, " > Color &Quantize" => "ImageColor", " >> Methode WUQUANT" => "ImageColor1", " >> Methode NNQUANT" => "ImageColor2", "&Help" => "Help", " > &About PIV" => "HelpAbout", ); my $Window = new Win32::GUI::Window ( -name => "Window", -title => "Perl Image Viewer", -pos => [100, 100], -size => [400, 400], -menu => $Menu, ); # $Window->AddGraphic ( Win32::GUI::Graphic->new ($Window, -name => "Graphic", -pos => [0, 0], -size => [$Window->ScaleWidth,$Window->ScaleHeight], ); my $WProp = new Win32::GUI::DialogBox( -title => "Image Properties", -left => 110, -top => 110, -width => 400, -height => 200, -name => "WProp", ); $WProp->AddLabel ( -name => "pFile", -text => "File :", -pos => [10, 25], -size => [280, 20] ); $WProp->AddLabel ( -name => "pWidth", -text => "Width :", -pos => [10, 50], -size => [200, 20] ); $WProp->AddLabel ( -name => "pHeight", -text => "Height :", -pos => [10, 75], -size => [200, 20] ); $WProp->AddLabel ( -name => "pBPP", -text => "BPP :", -pos => [10, 100], -size => [200, 20] ); $WProp->AddButton ( -name => "WPropClose", -text => "Close", -pos => [125, 125], ); PIVMenu(); $Window->Show(); Win32::GUI::Dialog(); ####################################################################### # # PIV Functions # ####################################################################### sub PIVInit { # # Init PIVLoadFilter and PIVSaveFilter # my %ReadFilter; my %SaveFilter; my $count = Win32::GUI::DIBitmap::GetFIFCount(); my $liste = ""; for (my $fif = 0; $fif < $count; $fif++) { my $ext = Win32::GUI::DIBitmap::FIFExtensionList($fif); my $desc = Win32::GUI::DIBitmap::FIFDescription($fif); my $read = Win32::GUI::DIBitmap::FIFSupportsReading($fif); my $write = Win32::GUI::DIBitmap::FIFSupportsWriting($fif); $desc .= " (*." . join (',*.', split ( ',', $ext)) . ")"; $ext = "*." . join (';*.', split ( ',', $ext)); if (Win32::GUI::DIBitmap::FIFSupportsReading($fif)) { $ReadFilter {"$desc"} = $ext; $liste .= ";$ext"; } if (Win32::GUI::DIBitmap::FIFSupportsWriting($fif)) { $SaveFilter {"$desc"} = $ext; } } # $ReadFilter {"All PIV Files"} = $liste; push @PIVReadFilter, "All PIV Files", $liste; foreach my $i (sort keys %ReadFilter) { push @PIVReadFilter, $i, $ReadFilter{$i}; } foreach my $i (sort keys %SaveFilter) { push @PIVSaveFilter, $i, $SaveFilter{$i}; } # # init PIVDirectory # $PIVDirectory = cwd(); $PIVDirectory =~ tr/\//\\/; } sub PIVMenu { if (defined $PIVDib) { $Menu->{ImageProperties}->Enabled(1); $Menu->{ImageConvert}->Enabled(1); my $bpp = $PIVDib->GetBPP(); $Menu->{ImageColor}->Enabled($bpp == 24); $Menu->{ImageConvert8bits}->Enabled($bpp != 8); $Menu->{ImageConvert16bits}->Enabled($bpp != 16); $Menu->{ImageConvert24bits}->Enabled($bpp != 24); $Menu->{ImageConvert32bits}->Enabled($bpp != 32); $Menu->{FileSave}->Enabled(1); $Menu->{FileSaveAs}->Enabled(1); } else { $Menu->{ImageProperties}->Enabled(0); $Menu->{ImageConvert}->Enabled(0); $Menu->{ImageColor}->Enabled(0); $Menu->{FileSave}->Enabled(0); $Menu->{FileSaveAs}->Enabled(0); } } sub PIVAdjustDisplay { if (defined $PIVDib) { my $w = $Window->Width - $Window->ScaleWidth; my $h = $Window->Height - $Window->ScaleHeight; $Window->Resize ($PIVDib->Width + $w, $PIVDib->Height + $h); } } sub PIVFinish { undef $PIVDib; return -1; } ####################################################################### # # Window Event # ####################################################################### sub Window_Terminate { return PIVFinish(); } sub Window_Resize { $Window->Graphic->Resize($Window->ScaleWidth, $Window->ScaleHeight); } ####################################################################### # # Graphic Event # ####################################################################### sub Graphic_Paint { my $DC = $Window->Graphic->GetDC(); if (defined $PIVDib) { # $PIVDib->CopyToDC($DC); $PIVDib->AlphaCopyToDC($DC); } $DC->Validate(); } ####################################################################### # # File Menu # ####################################################################### sub FileOpen_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Open Image File", -filter => \@PIVReadFilter, -directory => $PIVDirectory, ); if ($ret) { undef $PIVDib; $PIVDib = newFromFile Win32::GUI::DIBitmap ($ret); $PIVFile = $ret; PIVAdjustDisplay (); PIVAdjustDisplay (); PIVMenu(); } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetOpenFileName Error"); } } sub FileSave_Click { my $ret = Win32::GUI::MessageBox (0, "Overwrite existing file ?", "About",MB_ICONQUESTION | MB_YESNOCANCEL); if ($ret == 6) { $ret = $PIVDib->SaveToFile ($PIVFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveToFile ", "Save Error"); } } elsif ($ret == 7) { FileSaveAs_Click(); } } sub FileSaveAs_Click { my $ret = Win32::GUI::GetSaveFileName( -title => "Save Image File As", -filter => \@PIVSaveFilter, -directory => $PIVDirectory, ); if ($ret) { $PIVFile = $ret; $ret = $PIVDib->SaveToFile ($PIVFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveToFile ", "Save Error"); } } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetSaveFileName Error"); } } sub FileDirectory_Click { my $ret = Win32::GUI::BrowseForFolder ( -title => "Select default directory", -directory => $PIVDirectory, -folderonly => 1, ); $PIVDirectory = $ret if ($ret); } sub FileExit_Click { return PIVFinish(); } ####################################################################### # # Image Menu # ####################################################################### sub ImageProperties_Click { if (defined $PIVDib) { $Window->Disable(); $WProp->pFile->Text("File : ".$PIVFile); $WProp->pWidth->Text("Width : ".$PIVDib->Width()); $WProp->pHeight->Text("Height : ".$PIVDib->Height()); $WProp->pBPP->Text("BPP,Colors useds,Color type : ".$PIVDib->GetBPP(). ",".$PIVDib->GetColorsUsed(). ",".$PIVDib->GetColorType()); $WProp->Show(); } } sub ImageConvert8bits_Click { $PIVDib = $PIVDib->ConvertTo8Bits(); Graphic_Paint(); PIVMenu(); } sub ImageConvert16bits_Click { $PIVDib = $PIVDib->ConvertTo16Bits555(); Graphic_Paint(); PIVMenu(); } sub ImageConvert24bits_Click { $PIVDib = $PIVDib->ConvertTo24Bits(); Graphic_Paint(); PIVMenu(); } sub ImageConvert32bits_Click { $PIVDib = $PIVDib->ConvertTo32Bits(); Graphic_Paint(); PIVMenu(); } sub ImageColor1_Click { $PIVDib = $PIVDib->ColorQuantize(FIQ_WUQUANT); Graphic_Paint(); PIVMenu(); } sub ImageColor2_Click { $PIVDib = $PIVDib->ColorQuantize(FIQ_NNQUANT); Graphic_Paint(); PIVMenu(); } ####################################################################### # # Help Menu # ####################################################################### sub HelpAbout_Click { Win32::GUI::MessageBox (0, "Perl Image Viewer 1.0 by Laurent Rocher", "About",MB_ICONINFORMATION); } ####################################################################### # # Image Properties # ####################################################################### sub WPropClose_Click { $WProp->Hide(); $Window->Enable(); $Window->SetForegroundWindow(); } --- NEW FILE: test6.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - CopyToDC use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->CopyToDC($dc); $dib->CopyToDC($dc, ($width / 2) - 30, ($height / 2) - 30 , 60, 60); $dib->CopyToDC($dc, $width - 50, $height - 50, 50, 50, 20, 10); } |
From: jw <jw...@us...> - 2005-11-02 08:41:26
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/extlib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157/extlib Added Files: FreeImage.h FreeImage.lib Readme.txt Log Message: Added to repository --- NEW FILE: FreeImage.h --- // ========================================================== // FreeImage 3 // // Design and implementation by // - Floris van den Berg (flv...@wx...) // - Hervé Drolon (dr...@in...) // // Contributors: // - Adam Gates (ra...@xo...) // - Alex Kwak // - Alexander Dymerets (sa...@te...) // - Detlev Vendt (det...@br...) // - Jan L. Nauta (jl...@ma...) // - Jani Kajala (ja...@re...) // - Juergen Riecker (j.r...@gm...) // - Karl-Heinz Bussian (khb...@mo...) // - Laurent Rocher (ro...@cl...) // - Luca Piergentili (l.p...@te...) // - Machiel ten Brinke (br...@un...) // - Markus Loibl (mar...@ep...) // - Martin Weber (ma...@gm...) // - Matthias Wandel (mw...@ri...) // - Michal Novotny (mi...@et...) // - Petr Pytelka (py...@li...) // - Riley McNiff (rm...@ma...) // - Ryan Rubley (ry...@lo...) // - Volker Gärtner (vo...@gm...) // // This file is part of FreeImage 3 // // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER // THIS DISCLAIMER. // // Use at your own risk! // ========================================================== #ifndef FREEIMAGE_H #define FREEIMAGE_H // Version information ------------------------------------------------------ #define FREEIMAGE_MAJOR_VERSION 3 #define FREEIMAGE_MINOR_VERSION 5 #define FREEIMAGE_RELEASE_SERIAL 1 // Compiler options --------------------------------------------------------- #if defined(FREEIMAGE_LIB) || !(defined(WIN32) || defined(__WIN32__)) #define DLL_API #define DLL_CALLCONV #else #ifdef __MINGW32__ // prevents a bug in mingw32 #include <windows.h> #endif // __MINGW32__ #define DLL_CALLCONV __stdcall // The following ifdef block is the standard way of creating macros which make exporting // from a DLL simpler. All files within this DLL are compiled with the FREEIMAGE_EXPORTS // symbol defined on the command line. this symbol should not be defined on any project // that uses this DLL. This way any other project whose source files include this file see // DLL_API functions as being imported from a DLL, wheras this DLL sees symbols // defined with this macro as being exported. #ifdef FREEIMAGE_EXPORTS #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif // FREEIMAGE_EXPORTS #endif // FREEIMAGE_LIB || !WIN32 // Some versions of gcc may have BYTE_ORDER or __BYTE_ORDER defined // If your big endian system isn't being detected, add an OS specific check #if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || \ (defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || \ defined(__APPLE__) #define FREEIMAGE_BIGENDIAN #endif // BYTE_ORDER // Ensure 4-byte enums if we're using Borland C++ compilers #if defined(__BORLANDC__) #pragma option push -b #endif // For C compatility -------------------------------------------------------- #ifdef __cplusplus #define FI_DEFAULT(x) = x #define FI_ENUM(x) enum x #define FI_STRUCT(x) struct x #else #define FI_DEFAULT(x) #define FI_ENUM(x) typedef int x; enum x #define FI_STRUCT(x) typedef struct x x; struct x #endif // Bitmap types ------------------------------------------------------------- FI_STRUCT (FIBITMAP) { void *data; }; FI_STRUCT (FIMULTIBITMAP) { void *data; }; // Types used in the library (directly copied from Windows) ----------------- #ifndef _WINDOWS_ #define _WINDOWS_ #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #ifndef NULL #define NULL 0 #endif #ifndef SEEK_SET #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #endif #ifndef __MINGW32__ // prevents a bug in mingw32 typedef long BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long LONG; #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(push, 1) #else #pragma pack(1) #endif // WIN32 typedef struct tagRGBQUAD { #ifdef FREEIMAGE_BIGENDIAN BYTE rgbRed; BYTE rgbGreen; BYTE rgbBlue; #else BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; #endif // FREEIMAGE_BIGENDIAN BYTE rgbReserved; } RGBQUAD; typedef struct tagRGBTRIPLE { #ifdef FREEIMAGE_BIGENDIAN BYTE rgbtRed; BYTE rgbtGreen; BYTE rgbtBlue; #else BYTE rgbtBlue; BYTE rgbtGreen; BYTE rgbtRed; #endif // FREEIMAGE_BIGENDIAN } RGBTRIPLE; #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(pop) #else #pragma pack() #endif // WIN32 typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER; typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO, *PBITMAPINFO; #endif // __MINGW32__ #endif // _WINDOWS_ // Indexes for byte arrays, masks and shifts for treating pixels as words --- // These coincide with the order of RGBQUAD and RGBTRIPLE ------------------- #ifndef FREEIMAGE_BIGENDIAN // Little Endian (x86 / MS Windows, Linux) : BGR(A) order #define FI_RGBA_RED 2 #define FI_RGBA_GREEN 1 #define FI_RGBA_BLUE 0 #define FI_RGBA_ALPHA 3 #define FI_RGBA_RED_MASK 0x00FF0000 #define FI_RGBA_GREEN_MASK 0x0000FF00 #define FI_RGBA_BLUE_MASK 0x000000FF #define FI_RGBA_ALPHA_MASK 0xFF000000 #define FI_RGBA_RED_SHIFT 16 #define FI_RGBA_GREEN_SHIFT 8 #define FI_RGBA_BLUE_SHIFT 0 #define FI_RGBA_ALPHA_SHIFT 24 #else // Big Endian (PPC / Linux, MaxOSX) : RGB(A) order #define FI_RGBA_RED 0 #define FI_RGBA_GREEN 1 #define FI_RGBA_BLUE 2 #define FI_RGBA_ALPHA 3 #define FI_RGBA_RED_MASK 0xFF000000 #define FI_RGBA_GREEN_MASK 0x00FF0000 #define FI_RGBA_BLUE_MASK 0x0000FF00 #define FI_RGBA_ALPHA_MASK 0x000000FF #define FI_RGBA_RED_SHIFT 24 #define FI_RGBA_GREEN_SHIFT 16 #define FI_RGBA_BLUE_SHIFT 8 #define FI_RGBA_ALPHA_SHIFT 0 #endif // FREEIMAGE_BIGENDIAN #define FI_RGBA_RGB_MASK (FI_RGBA_RED_MASK|FI_RGBA_GREEN_MASK|FI_RGBA_BLUE_MASK) // The 16bit macros only include masks and shifts, since each color element is not byte aligned #define FI16_555_RED_MASK 0x7C00 #define FI16_555_GREEN_MASK 0x03E0 #define FI16_555_BLUE_MASK 0x001F #define FI16_555_RED_SHIFT 10 #define FI16_555_GREEN_SHIFT 5 #define FI16_555_BLUE_SHIFT 0 #define FI16_565_RED_MASK 0xF800 #define FI16_565_GREEN_MASK 0x07E0 #define FI16_565_BLUE_MASK 0x001F #define FI16_565_RED_SHIFT 11 #define FI16_565_GREEN_SHIFT 5 #define FI16_565_BLUE_SHIFT 0 // ICC profile support ------------------------------------------------------ #define FIICC_DEFAULT 0x00 #define FIICC_COLOR_IS_CMYK 0x01 FI_STRUCT (FIICCPROFILE) { WORD flags; // info flag DWORD size; // profile's size measured in bytes void *data; // points to a block of contiguous memory containing the profile }; // Important enums ---------------------------------------------------------- /** I/O image format identifiers. */ FI_ENUM(FREE_IMAGE_FORMAT) { FIF_UNKNOWN = -1, FIF_BMP = 0, FIF_ICO = 1, FIF_JPEG = 2, FIF_JNG = 3, FIF_KOALA = 4, FIF_LBM = 5, FIF_IFF = FIF_LBM, FIF_MNG = 6, FIF_PBM = 7, FIF_PBMRAW = 8, FIF_PCD = 9, FIF_PCX = 10, FIF_PGM = 11, FIF_PGMRAW = 12, FIF_PNG = 13, FIF_PPM = 14, FIF_PPMRAW = 15, FIF_RAS = 16, FIF_TARGA = 17, FIF_TIFF = 18, FIF_WBMP = 19, FIF_PSD = 20, FIF_CUT = 21, FIF_XBM = 22, FIF_XPM = 23, FIF_DDS = 24, FIF_GIF = 25 }; /** Image type used in FreeImage. */ FI_ENUM(FREE_IMAGE_TYPE) { FIT_UNKNOWN = 0, // unknown type FIT_BITMAP = 1, // standard image : 1-, 4-, 8-, 16-, 24-, 32-bit FIT_UINT16 = 2, // array of unsigned short : unsigned 16-bit FIT_INT16 = 3, // array of short : signed 16-bit FIT_UINT32 = 4, // array of unsigned long : unsigned 32-bit FIT_INT32 = 5, // array of long : signed 32-bit FIT_FLOAT = 6, // array of float : 32-bit IEEE floating point FIT_DOUBLE = 7, // array of double : 64-bit IEEE floating point FIT_COMPLEX = 8 // array of FICOMPLEX : 2 x 64-bit IEEE floating point }; /** Data structure for COMPLEX type (complex number) */ typedef struct tagFreeImageComplex { /// real part double r; /// imaginary part double i; } FICOMPLEX; /** Image color type used in FreeImage. */ FI_ENUM(FREE_IMAGE_COLOR_TYPE) { FIC_MINISWHITE = 0, // min value is white FIC_MINISBLACK = 1, // min value is black FIC_RGB = 2, // RGB color model FIC_PALETTE = 3, // color map indexed FIC_RGBALPHA = 4, // RGB color model with alpha channel FIC_CMYK = 5 // CMYK color model }; /** Color quantization algorithms. Constants used in FreeImage_ColorQuantize. */ FI_ENUM(FREE_IMAGE_QUANTIZE) { FIQ_WUQUANT = 0, // Xiaolin Wu color quantization algorithm FIQ_NNQUANT = 1 // NeuQuant neural-net quantization algorithm by Anthony Dekker }; /** Dithering algorithms. Constants used FreeImage_Dither. */ FI_ENUM(FREE_IMAGE_DITHER) { FID_FS = 0, // Floyd & Steinberg error diffusion FID_BAYER4x4 = 1, // Bayer ordered dispersed dot dithering (order 2 dithering matrix) FID_BAYER8x8 = 2, // Bayer ordered dispersed dot dithering (order 3 dithering matrix) FID_CLUSTER6x6 = 3, // Ordered clustered dot dithering (order 3 - 6x6 matrix) FID_CLUSTER8x8 = 4, // Ordered clustered dot dithering (order 4 - 8x8 matrix) FID_CLUSTER16x16= 5 // Ordered clustered dot dithering (order 8 - 16x16 matrix) }; /** Upsampling / downsampling filters. Constants used in FreeImage_Rescale. */ FI_ENUM(FREE_IMAGE_FILTER) { FILTER_BOX = 0, // Box, pulse, Fourier window, 1st order (constant) b-spline FILTER_BICUBIC = 1, // Mitchell & Netravali's two-param cubic filter FILTER_BILINEAR = 2, // Bilinear filter FILTER_BSPLINE = 3, // 4th order (cubic) b-spline FILTER_CATMULLROM = 4, // Catmull-Rom spline, Overhauser spline FILTER_LANCZOS3 = 5 // Lanczos3 filter }; /** Color channels. Constants used in color manipulation routines. */ FI_ENUM(FREE_IMAGE_COLOR_CHANNEL) { FICC_RGB = 0, // Use red, green and blue channels FICC_RED = 1, // Use red channel FICC_GREEN = 2, // Use green channel FICC_BLUE = 3, // Use blue channel FICC_ALPHA = 4, // Use alpha channel FICC_BLACK = 5, // Use black channel FICC_REAL = 6, // Complex images: use real part FICC_IMAG = 7, // Complex images: use imaginary part FICC_MAG = 8, // Complex images: use magnitude FICC_PHASE = 9 // Complex images: use phase }; // Metadata support --------------------------------------------------------- /** Tag data type information (based on TIFF specifications) Note: RATIONALs are the ratio of two 32-bit integer values. */ FI_ENUM(FREE_IMAGE_MDTYPE) { FIDT_NOTYPE = 0, // placeholder FIDT_BYTE = 1, // 8-bit unsigned integer FIDT_ASCII = 2, // 8-bit bytes w/ last byte null FIDT_SHORT = 3, // 16-bit unsigned integer FIDT_LONG = 4, // 32-bit unsigned integer FIDT_RATIONAL = 5, // 64-bit unsigned fraction FIDT_SBYTE = 6, // 8-bit signed integer FIDT_UNDEFINED = 7, // 8-bit untyped data FIDT_SSHORT = 8, // 16-bit signed integer FIDT_SLONG = 9, // 32-bit signed integer FIDT_SRATIONAL = 10, // 64-bit signed fraction FIDT_FLOAT = 11, // 32-bit IEEE floating point FIDT_DOUBLE = 12, // 64-bit IEEE floating point FIDT_IFD = 13 // 32-bit unsigned integer (offset) }; /** Metadata models supported by FreeImage */ FI_ENUM(FREE_IMAGE_MDMODEL) { FIMD_NODATA = -1, FIMD_COMMENTS = 0, // single comment or keywords FIMD_EXIF_MAIN = 1, // Exif-TIFF metadata FIMD_EXIF_EXIF = 2, // Exif-specific metadata FIMD_EXIF_GPS = 3, // Exif GPS metadata FIMD_EXIF_MAKERNOTE = 4, // Exif maker note metadata FIMD_EXIF_INTEROP = 5, // Exif interoperability metadata FIMD_IPTC = 6, // IPTC/NAA metadata FIMD_XMP = 7, // Abobe XMP metadata FIMD_GEOTIFF = 8, // GeoTIFF metadata (to be implemented) FIMD_CUSTOM = 9 // Used to attach other metadata types to a dib }; /** Handle to a metadata model */ FI_STRUCT (FIMETADATA) { void *data; }; /** Metadata attribute */ FI_STRUCT (FITAG) { char *key; // tag field name char *description; // tag description WORD id; // tag ID WORD type; // tag data type (see FREE_IMAGE_MDTYPE) DWORD count; // number of components (in 'tag data types' units) DWORD length; // value length in bytes void *value; // tag value }; // File IO routines --------------------------------------------------------- #ifndef FREEIMAGE_IO #define FREEIMAGE_IO typedef void* fi_handle; typedef unsigned (DLL_CALLCONV *FI_ReadProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); typedef unsigned (DLL_CALLCONV *FI_WriteProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); typedef int (DLL_CALLCONV *FI_SeekProc) (fi_handle handle, long offset, int origin); typedef long (DLL_CALLCONV *FI_TellProc) (fi_handle handle); #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(push, 1) #else #pragma pack(1) #endif // WIN32 FI_STRUCT(FreeImageIO) { FI_ReadProc read_proc; // pointer to the function used to read data FI_WriteProc write_proc; // pointer to the function used to write data FI_SeekProc seek_proc; // pointer to the function used to seek FI_TellProc tell_proc; // pointer to the function used to aquire the current position }; #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(pop) #else #pragma pack() #endif // WIN32 /** Handle to a memory I/O stream */ FI_STRUCT (FIMEMORY) { void *data; }; #endif // FREEIMAGE_IO // Plugin routines ---------------------------------------------------------- #ifndef PLUGINS #define PLUGINS typedef const char *(DLL_CALLCONV *FI_FormatProc) (); typedef const char *(DLL_CALLCONV *FI_DescriptionProc) (); typedef const char *(DLL_CALLCONV *FI_ExtensionListProc) (); typedef const char *(DLL_CALLCONV *FI_RegExprProc) (); typedef void *(DLL_CALLCONV *FI_OpenProc)(FreeImageIO *io, fi_handle handle, BOOL read); typedef void (DLL_CALLCONV *FI_CloseProc)(FreeImageIO *io, fi_handle handle, void *data); typedef int (DLL_CALLCONV *FI_PageCountProc)(FreeImageIO *io, fi_handle handle, void *data); typedef int (DLL_CALLCONV *FI_PageCapabilityProc)(FreeImageIO *io, fi_handle handle, void *data); typedef FIBITMAP *(DLL_CALLCONV *FI_LoadProc)(FreeImageIO *io, fi_handle handle, int page, int flags, void *data); typedef BOOL (DLL_CALLCONV *FI_SaveProc)(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data); typedef BOOL (DLL_CALLCONV *FI_ValidateProc)(FreeImageIO *io, fi_handle handle); typedef const char *(DLL_CALLCONV *FI_MimeProc) (); typedef BOOL (DLL_CALLCONV *FI_SupportsExportBPPProc)(int bpp); typedef BOOL (DLL_CALLCONV *FI_SupportsExportTypeProc)(FREE_IMAGE_TYPE type); typedef BOOL (DLL_CALLCONV *FI_SupportsICCProfilesProc)(); FI_STRUCT (Plugin) { FI_FormatProc format_proc; FI_DescriptionProc description_proc; FI_ExtensionListProc extension_proc; FI_RegExprProc regexpr_proc; FI_OpenProc open_proc; FI_CloseProc close_proc; FI_PageCountProc pagecount_proc; FI_PageCapabilityProc pagecapability_proc; FI_LoadProc load_proc; FI_SaveProc save_proc; FI_ValidateProc validate_proc; FI_MimeProc mime_proc; FI_SupportsExportBPPProc supports_export_bpp_proc; FI_SupportsExportTypeProc supports_export_type_proc; FI_SupportsICCProfilesProc supports_icc_profiles_proc; }; typedef void (DLL_CALLCONV *FI_InitProc)(Plugin *plugin, int format_id); #endif // PLUGINS // Load / Save flag constants ----------------------------------------------- #define BMP_DEFAULT 0 #define BMP_SAVE_RLE 1 #define CUT_DEFAULT 0 #define DDS_DEFAULT 0 #define GIF_DEFAULT 0 #define ICO_DEFAULT 0 #define ICO_MAKEALPHA 1 // convert to 32bpp and create an alpha channel from the AND-mask when loading #define IFF_DEFAULT 0 #define JPEG_DEFAULT 0 #define JPEG_FAST 1 #define JPEG_ACCURATE 2 #define JPEG_QUALITYSUPERB 0x80 #define JPEG_QUALITYGOOD 0x100 #define JPEG_QUALITYNORMAL 0x200 #define JPEG_QUALITYAVERAGE 0x400 #define JPEG_QUALITYBAD 0x800 #define KOALA_DEFAULT 0 #define LBM_DEFAULT 0 #define MNG_DEFAULT 0 #define PCD_DEFAULT 0 #define PCD_BASE 1 // load the bitmap sized 768 x 512 #define PCD_BASEDIV4 2 // load the bitmap sized 384 x 256 #define PCD_BASEDIV16 3 // load the bitmap sized 192 x 128 #define PCX_DEFAULT 0 #define PNG_DEFAULT 0 #define PNG_IGNOREGAMMA 1 // avoid gamma correction #define PNM_DEFAULT 0 #define PNM_SAVE_RAW 0 // If set the writer saves in RAW format (i.e. P4, P5 or P6) #define PNM_SAVE_ASCII 1 // If set the writer saves in ASCII format (i.e. P1, P2 or P3) #define PSD_DEFAULT 0 #define RAS_DEFAULT 0 #define TARGA_DEFAULT 0 #define TARGA_LOAD_RGB888 1 // If set the loader converts RGB555 and ARGB8888 -> RGB888. #define TIFF_DEFAULT 0 #define TIFF_CMYK 0x0001 // reads/stores tags for separated CMYK (use | to combine with compression flags) #define TIFF_PACKBITS 0x0100 // save using PACKBITS compression #define TIFF_DEFLATE 0x0200 // save using DEFLATE compression (a.k.a. ZLIB compression) #define TIFF_ADOBE_DEFLATE 0x0400 // save using ADOBE DEFLATE compression #define TIFF_NONE 0x0800 // save without any compression #define TIFF_CCITTFAX3 0x1000 // save using CCITT Group 3 fax encoding #define TIFF_CCITTFAX4 0x2000 // save using CCITT Group 4 fax encoding #define TIFF_LZW 0x4000 // save using LZW compression #define WBMP_DEFAULT 0 #define XBM_DEFAULT 0 #define XPM_DEFAULT 0 #ifdef __cplusplus extern "C" { #endif // Init / Error routines ---------------------------------------------------- DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE)); DLL_API void DLL_CALLCONV FreeImage_DeInitialise(void); // Version routines --------------------------------------------------------- DLL_API const char *DLL_CALLCONV FreeImage_GetVersion(void); DLL_API const char *DLL_CALLCONV FreeImage_GetCopyrightMessage(void); // Message output functions ------------------------------------------------- DLL_API void DLL_CALLCONV FreeImage_OutputMessageProc(int fif, const char *fmt, ...); typedef void (*FreeImage_OutputMessageFunction)(FREE_IMAGE_FORMAT fif, const char *msg); DLL_API void DLL_CALLCONV FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf); // Allocate / Clone / Unload routines --------------------------------------- DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Allocate(int width, int height, int bpp, unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp FI_DEFAULT(8), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); DLL_API FIBITMAP * DLL_CALLCONV FreeImage_Clone(FIBITMAP *dib); DLL_API void DLL_CALLCONV FreeImage_Unload(FIBITMAP *dib); // Load / Save routines ----------------------------------------------------- DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags FI_DEFAULT(0)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0)); DLL_API BOOL DLL_CALLCONV FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); // Memory I/O stream routines ----------------------------------------------- DLL_API FIMEMORY *DLL_CALLCONV FreeImage_OpenMemory(BYTE *data FI_DEFAULT(0), DWORD size_in_bytes FI_DEFAULT(0)); DLL_API void DLL_CALLCONV FreeImage_CloseMemory(FIMEMORY *stream); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0)); DLL_API BOOL DLL_CALLCONV FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags FI_DEFAULT(0)); DLL_API long DLL_CALLCONV FreeImage_TellMemory(FIMEMORY *stream); DLL_API BOOL DLL_CALLCONV FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin); DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes); // Plugin Interface --------------------------------------------------------- DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterExternalPlugin(const char *path, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); DLL_API int DLL_CALLCONV FreeImage_GetFIFCount(void); DLL_API int DLL_CALLCONV FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable); DLL_API int DLL_CALLCONV FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFormat(const char *format); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromMime(const char *mime); DLL_API const char *DLL_CALLCONV FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilename(const char *filename); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif); // Multipaging interface ---------------------------------------------------- DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory FI_DEFAULT(FALSE)); DLL_API BOOL DLL_CALLCONV FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags FI_DEFAULT(0)); DLL_API int DLL_CALLCONV FreeImage_GetPageCount(FIMULTIBITMAP *bitmap); DLL_API void DLL_CALLCONV FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data); DLL_API void DLL_CALLCONV FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data); DLL_API void DLL_CALLCONV FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page); DLL_API FIBITMAP * DLL_CALLCONV FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page); DLL_API void DLL_CALLCONV FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *page, BOOL changed); DLL_API BOOL DLL_CALLCONV FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source); DLL_API BOOL DLL_CALLCONV FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count); // Filetype request routines ------------------------------------------------ DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0)); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size FI_DEFAULT(0)); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0)); // Image type request routine ----------------------------------------------- DLL_API FREE_IMAGE_TYPE DLL_CALLCONV FreeImage_GetImageType(FIBITMAP *dib); // FreeImage helper routines ------------------------------------------------ DLL_API BOOL DLL_CALLCONV FreeImage_IsLittleEndian(void); DLL_API BOOL DLL_CALLCONV FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); DLL_API BOOL DLL_CALLCONV FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); // Pixel access routines ---------------------------------------------------- DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib); DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline); DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); // DIB info routines -------------------------------------------------------- DLL_API unsigned DLL_CALLCONV FreeImage_GetColorsUsed(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetBPP(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetWidth(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetHeight(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetLine(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetPitch(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetDIBSize(FIBITMAP *dib); DLL_API RGBQUAD *DLL_CALLCONV FreeImage_GetPalette(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterX(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterY(FIBITMAP *dib); DLL_API BITMAPINFOHEADER *DLL_CALLCONV FreeImage_GetInfoHeader(FIBITMAP *dib); DLL_API BITMAPINFO *DLL_CALLCONV FreeImage_GetInfo(FIBITMAP *dib); DLL_API FREE_IMAGE_COLOR_TYPE DLL_CALLCONV FreeImage_GetColorType(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetRedMask(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetGreenMask(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetBlueMask(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetTransparencyCount(FIBITMAP *dib); DLL_API BYTE * DLL_CALLCONV FreeImage_GetTransparencyTable(FIBITMAP *dib); DLL_API void DLL_CALLCONV FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled); DLL_API void DLL_CALLCONV FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count); DLL_API BOOL DLL_CALLCONV FreeImage_IsTransparent(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_HasBackgroundColor(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); DLL_API BOOL DLL_CALLCONV FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); // ICC profile routines ----------------------------------------------------- DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_GetICCProfile(FIBITMAP *dib); DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size); DLL_API void DLL_CALLCONV FreeImage_DestroyICCProfile(FIBITMAP *dib); // Line conversion routines ------------------------------------------------- DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels); // Smart conversion routines ------------------------------------------------ DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo4Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); DLL_API void DLL_CALLCONV FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE)); // ZLib interface ----------------------------------------------------------- DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); DLL_API DWORD DLL_CALLCONV FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); // -------------------------------------------------------------------------- // Metadata routines -------------------------------------------------------- // -------------------------------------------------------------------------- // iterator DLL_API FIMETADATA *DLL_CALLCONV FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag); DLL_API BOOL DLL_CALLCONV FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag); DLL_API void DLL_CALLCONV FreeImage_FindCloseMetadata(FIMETADATA *mdhandle); // setter and getter DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag); DLL_API BOOL DLL_CALLCONV FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag); // helpers DLL_API unsigned DLL_CALLCONV FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib); // tag to C string conversion DLL_API const char* DLL_CALLCONV FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make FI_DEFAULT(NULL)); // -------------------------------------------------------------------------- // Image manipulation toolkit ----------------------------------------------- // -------------------------------------------------------------------------- // rotation and flipping DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateClassic(FIBITMAP *dib, double angle); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask); DLL_API BOOL DLL_CALLCONV FreeImage_FlipHorizontal(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_FlipVertical(FIBITMAP *dib); // upsampling / downsampling DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter); // color manipulation routines (point operations) DLL_API BOOL DLL_CALLCONV FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API BOOL DLL_CALLCONV FreeImage_AdjustGamma(FIBITMAP *dib, double gamma); DLL_API BOOL DLL_CALLCONV FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage); DLL_API BOOL DLL_CALLCONV FreeImage_AdjustContrast(FIBITMAP *dib, double percentage); DLL_API BOOL DLL_CALLCONV FreeImage_Invert(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel FI_DEFAULT(FICC_BLACK)); // channel processing routines DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API BOOL DLL_CALLCONV FreeImage_SetChannel(FIBITMAP *dib, FIBITMAP *dib8, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API BOOL DLL_CALLCONV FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); // copy / paste / composite routines DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom); DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL)); // restore the borland-specific enum size option #if defined(__BORLANDC__) #pragma option pop #endif #ifdef __cplusplus } #endif #endif // FREEIMAGE_H --- NEW FILE: Readme.txt --- Download FreeImage source code at http://freeimage.sourceforge.net/ Build the FreeImage static lib with MSVC project. Copy the FreeImage.lib and FreeImage.h in the extlib directory. Run : perl Makefile.pl nmake nmake install --- NEW FILE: FreeImage.lib --- (This appears to be a binary file; contents omitted.) |
From: jw <jw...@us...> - 2005-11-02 08:41:25
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples/bmp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157/samples/bmp Added Files: 1.bmp 1.png 1.tga 2.bmp 2.png 2.tga 3.bmp 3.png 3.tga 4.bmp 4.png 4.tga 5.bmp 5.png 5.tga Zapotec.JPG Zapotec.bmp small.tga Log Message: Added to repository --- NEW FILE: 1.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 4.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: small.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 4.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 2.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Zapotec.JPG --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 1.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 5.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 2.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 3.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 5.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 2.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Zapotec.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 4.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 5.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 3.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 1.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 3.bmp --- (This appears to be a binary file; contents omitted.) |
From: jw <jw...@us...> - 2005-11-02 08:35:42
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples/bmp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32021/bmp Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples/bmp added to the repository |
From: jw <jw...@us...> - 2005-11-02 08:35:21
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31922/samples Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples added to the repository |
From: jw <jw...@us...> - 2005-11-02 08:35:20
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/extlib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31922/extlib Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/extlib added to the repository |
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/MFCGrid In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15861/MFCGrid Added Files: CellRange.h GridCell.cpp GridCell.h GridCellBase.cpp GridCellBase.h GridCellCheck.cpp GridCellCheck.h GridCellCombo.cpp GridCellCombo.h GridCellDateTime.cpp GridCellDateTime.h GridCellNumeric.cpp GridCellNumeric.h GridCellURL.cpp GridCellURL.h GridCtrl.cpp GridCtrl.h GridDropTarget.cpp GridDropTarget.h InPlaceEdit.cpp InPlaceEdit.h Makefile MemDC.h StdAfx.cpp StdAfx.h TitleTip.cpp TitleTip.h Log Message: Added to repository --- NEW FILE: InPlaceEdit.h --- ////////////////////////////////////////////////////////////////////// // InPlaceEdit.h : header file // // MFC Grid Control - inplace editing class // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.10+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_) #define AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CInPlaceEdit : public CEdit { // Construction public: CInPlaceEdit(CWnd* pParent, CRect& rect, DWORD dwStyle, UINT nID, int nRow, int nColumn, CString sInitText, UINT nFirstChar); // Attributes public: // Operations public: void EndEdit(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CInPlaceEdit) public: virtual BOOL PreTranslateMessage(MSG* pMsg); protected: virtual void PostNcDestroy(); //}}AFX_VIRTUAL // Implementation public: virtual ~CInPlaceEdit(); // Generated message map functions protected: //{{AFX_MSG(CInPlaceEdit) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg UINT OnGetDlgCode(); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: int m_nRow; int m_nColumn; CString m_sInitText; UINT m_nLastChar; BOOL m_bExitOnArrows; CRect m_Rect; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_) --- NEW FILE: GridCellCheck.cpp --- // GridCellCheck.cpp : implementation file // // MFC Grid Control - Main grid cell class // // Provides the implementation for a combobox cell type of the // grid control. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // Parts of the code contained in this file are based on the original // CInPlaceList from http://www.codeguru.com/listview // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.22+ // // History: // 23 Jul 2001 - Complete rewrite // ///////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "GridCell.h" #include "GridCtrl.h" #include "GridCellCheck.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CGridCellCheck, CGridCell) CGridCellCheck::CGridCellCheck() : CGridCell() { m_bChecked = FALSE; //m_Rect.IsRectNull(); } CSize CGridCellCheck::GetCellExtent(CDC* pDC) { // Using SM_CXHSCROLL as a guide to the size of the checkbox int nWidth = GetSystemMetrics(SM_CXHSCROLL) + 2*GetMargin(); // Yogurt $$LR$$ CSize cellSize = CGridCell::GetCellExtent(pDC); cellSize.cx += nWidth; cellSize.cy = max (cellSize.cy, nWidth); return cellSize; } // i/o: i=dims of cell rect; o=dims of text rect BOOL CGridCellCheck::GetTextRect( LPRECT pRect) { BOOL bResult = CGridCell::GetTextRect(pRect); if (bResult) { int nWidth = GetSystemMetrics(SM_CXHSCROLL) + 2*GetMargin(); pRect->left += nWidth; if (pRect->left > pRect->right) pRect->left = pRect->right; } return bResult; } // Override draw so that when the cell is selected, a drop arrow is shown in the RHS. BOOL CGridCellCheck::Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd /*=TRUE*/) { BOOL bResult = CGridCell::Draw(pDC, nRow, nCol, rect, bEraseBkgnd); #ifndef _WIN32_WCE // Store the cell's dimensions for later m_Rect = rect; CRect CheckRect = GetCheckPlacement(); rect.left = CheckRect.right; // enough room to draw? // if (CheckRect.Width() < rect.Width() && CheckRect.Height() < rect.Height()) { // Do the draw pDC->DrawFrameControl(GetCheckPlacement(), DFC_BUTTON, (m_bChecked)? DFCS_BUTTONCHECK | DFCS_CHECKED : DFCS_BUTTONCHECK); // } #endif return bResult; } void CGridCellCheck::OnClick(CPoint PointCellRelative) { // PointCellRelative is relative to the topleft of the cell. Convert to client coords PointCellRelative += m_Rect.TopLeft(); CCellID cell = GetGrid()->GetCellFromPt (PointCellRelative); if (!GetGrid()->IsCellEditable (cell)) return; // GetCheckPlacement returns the checkbox dimensions in client coords. Only check/ // uncheck if the user clicked in the box if (GetCheckPlacement().PtInRect(PointCellRelative)) { m_bChecked = !m_bChecked; GetGrid()->InvalidateRect(m_Rect); } } ////////////////////////////////////////////////////////////////////// // Operations ////////////////////////////////////////////////////////////////////// BOOL CGridCellCheck::SetCheck(BOOL bChecked /*=TRUE*/) { BOOL bTemp = m_bChecked; m_bChecked = bChecked; if (!m_Rect.IsRectEmpty()) GetGrid()->InvalidateRect(m_Rect); return bTemp; } BOOL CGridCellCheck::GetCheck() { return m_bChecked; } ////////////////////////////////////////////////////////////////////// // Protected implementation ////////////////////////////////////////////////////////////////////// // Returns the dimensions and placement of the checkbox in client coords. CRect CGridCellCheck::GetCheckPlacement() { int nWidth = GetSystemMetrics(SM_CXHSCROLL); CRect place = m_Rect + CSize(GetMargin(), GetMargin()); place.right = place.left + nWidth; place.bottom = place.top + nWidth; /* for centering int nDiff = (place.Width() - nWidth)/2; if (nDiff > 0) { place.left += nDiff; place.right = place.left + nWidth; } nDiff = (place.Height() - nWidth)/2; if (nDiff > 0) { place.top += nDiff; place.bottom = place.top + nWidth; } */ // Yogurt $$LR$$ if (m_Rect.Height() < nWidth + 2 * (int)GetMargin() ) { place.top = m_Rect.top + (m_Rect.Height() - nWidth) / 2; place.bottom = place.top + nWidth; } return place; } --- NEW FILE: GridCell.cpp --- // GridCell.cpp : implementation file // // MFC Grid Control - Main grid cell class // // Provides the implementation for the "default" cell type of the // grid control. Adds in cell editing. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.20+ // // History: // Eric Woodruff - 20 Feb 2000 - Added PrintCell() plus other minor changes // Ken Bertelson - 12 Apr 2000 - Split CGridCell into CGridCell and CGridCellBase // <ken...@ho...> // C Maunder - 17 Jun 2000 - Font handling optimsed, Added CGridDefaultCell // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "GridCell.h" #include "InPlaceEdit.h" #include "GridCtrl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CGridCell, CGridCellBase) IMPLEMENT_DYNCREATE(CGridDefaultCell, CGridCell) ///////////////////////////////////////////////////////////////////////////// // GridCell CGridCell::CGridCell() { m_plfFont = NULL; CGridCell::Reset(); } CGridCell::~CGridCell() { delete m_plfFont; } ///////////////////////////////////////////////////////////////////////////// // GridCell Attributes void CGridCell::operator=(const CGridCell& cell) { if (this != &cell) CGridCellBase::operator=(cell); } void CGridCell::Reset() { CGridCellBase::Reset(); m_strText.Empty(); m_nImage = -1; m_lParam = NULL; // BUG FIX J. Bloggs 20/10/03 m_pGrid = NULL; m_bEditing = FALSE; m_pEditWnd = NULL; m_nFormat = (DWORD)-1; // Use default from CGridDefaultCell m_crBkClr = CLR_DEFAULT; // Background colour (or CLR_DEFAULT) m_crFgClr = CLR_DEFAULT; // Forground colour (or CLR_DEFAULT) m_nMargin = (UINT)-1; // Use default from CGridDefaultCell delete m_plfFont; m_plfFont = NULL; // Cell font } void CGridCell::SetFont(const LOGFONT* plf) { if (plf == NULL) { delete m_plfFont; m_plfFont = NULL; } else { if (!m_plfFont) m_plfFont = new LOGFONT; if (m_plfFont) memcpy(m_plfFont, plf, sizeof(LOGFONT)); } } LOGFONT* CGridCell::GetFont() const { if (m_plfFont == NULL) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return NULL; return pDefaultCell->GetFont(); } return m_plfFont; } CFont* CGridCell::GetFontObject() const { // If the default font is specified, use the default cell implementation if (m_plfFont == NULL) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return NULL; return pDefaultCell->GetFontObject(); } else { static CFont Font; Font.DeleteObject(); Font.CreateFontIndirect(m_plfFont); return &Font; } } DWORD CGridCell::GetFormat() const { if (m_nFormat == (DWORD)-1) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return 0; return pDefaultCell->GetFormat(); } return m_nFormat; } UINT CGridCell::GetMargin() const { if (m_nMargin == (UINT)-1) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return 0; return pDefaultCell->GetMargin(); } return m_nMargin; } ///////////////////////////////////////////////////////////////////////////// // GridCell Operations BOOL CGridCell::Edit(int nRow, int nCol, CRect rect, CPoint /* point */, UINT nID, UINT nChar) { if ( m_bEditing ) { if (m_pEditWnd) m_pEditWnd->SendMessage ( WM_CHAR, nChar ); } else { DWORD dwStyle = ES_LEFT; if (GetFormat() & DT_RIGHT) dwStyle = ES_RIGHT; else if (GetFormat() & DT_CENTER) dwStyle = ES_CENTER; m_bEditing = TRUE; // InPlaceEdit auto-deletes itself CGridCtrl* pGrid = GetGrid(); m_pEditWnd = new CInPlaceEdit(pGrid, rect, dwStyle, nID, nRow, nCol, GetText(), nChar); } return TRUE; } void CGridCell::EndEdit() { if (m_pEditWnd) ((CInPlaceEdit*)m_pEditWnd)->EndEdit(); } void CGridCell::OnEndEdit() { m_bEditing = FALSE; m_pEditWnd = NULL; } ///////////////////////////////////////////////////////////////////////////// // CGridDefaultCell CGridDefaultCell::CGridDefaultCell() { #ifdef _WIN32_WCE m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX; #else m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX | DT_END_ELLIPSIS; #endif m_crFgClr = CLR_DEFAULT; m_crBkClr = CLR_DEFAULT; m_Size = CSize(30,10); m_dwStyle = 0; #ifdef _WIN32_WCE LOGFONT lf; GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf); SetFont(&lf); #else // not CE NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(NONCLIENTMETRICS); VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0)); SetFont(&(ncm.lfMessageFont)); #endif } CGridDefaultCell::~CGridDefaultCell() { m_Font.DeleteObject(); } void CGridDefaultCell::SetFont(const LOGFONT* plf) { ASSERT(plf); if (!plf) return; m_Font.DeleteObject(); m_Font.CreateFontIndirect(plf); CGridCell::SetFont(plf); // Get the font size and hence the default cell size CDC* pDC = CDC::FromHandle(::GetDC(NULL)); if (pDC) { CFont* pOldFont = pDC->SelectObject(&m_Font); SetMargin(pDC->GetTextExtent(_T(" "), 1).cx); m_Size = pDC->GetTextExtent(_T(" XXXXXXXXXXXX "), 14); m_Size.cy = (m_Size.cy * 3) / 2; pDC->SelectObject(pOldFont); ReleaseDC(NULL, pDC->GetSafeHdc()); } else { SetMargin(3); m_Size = CSize(40,16); } } LOGFONT* CGridDefaultCell::GetFont() const { ASSERT(m_plfFont); // This is the default - it CAN'T be NULL! return m_plfFont; } CFont* CGridDefaultCell::GetFontObject() const { ASSERT(m_Font.GetSafeHandle()); return (CFont*) &m_Font; } --- NEW FILE: Makefile --- # Microsoft Developer Studio Generated NMAKE File, Based on MFCGrid.dsp !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CPP=cl.exe RSC=rc.exe OUTDIR=.\Lib INTDIR=.\Build # Begin Custom Macros OutDir=.\Lib # End Custom Macros ALL : "$(OUTDIR)\MFCGrid.lib" CLEAN : -@erase "$(INTDIR)\GridCellUrl.obj" -@erase "$(INTDIR)\GridCellNumeric.obj" -@erase "$(INTDIR)\GridCellDateTime.obj" -@erase "$(INTDIR)\GridCellCheck.obj" -@erase "$(INTDIR)\GridCellCombo.obj" -@erase "$(INTDIR)\GridCell.obj" -@erase "$(INTDIR)\GridCellBase.obj" -@erase "$(INTDIR)\GridCtrl.obj" -@erase "$(INTDIR)\GridDropTarget.obj" -@erase "$(INTDIR)\InPlaceEdit.obj" -@erase "$(INTDIR)\StdAfx.obj" -@erase "$(INTDIR)\TitleTip.obj" -@erase "$(INTDIR)\vc60.idb" -@erase "$(INTDIR)\MFCGrid.pch" -@erase "$(OUTDIR)\MFCGrid.lib" "$(OUTDIR)" : mkdir "$(OUTDIR)" "$(INTDIR)" : mkdir "$(INTDIR)" CPP=cl.exe CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D"_WINDLL" /D"_USRDLL" /D "_AFXDLL" /D "_AFX_NOFORCE_LIBS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\MFCGrid.bsc" BSC32_SBRS= \ LIB32=link.exe -lib LIB32_FLAGS=/nologo /out:"$(OUTDIR)\MFCGrid.lib" LIB32_OBJS= \ "$(INTDIR)\TitleTip.obj" \ "$(INTDIR)\InPlaceEdit.obj" \ "$(INTDIR)\GridDropTarget.obj" \ "$(INTDIR)\GridCtrl.obj" \ "$(INTDIR)\GridCellBase.obj" \ "$(INTDIR)\GridCell.obj" \ "$(INTDIR)\GridCellNumeric.obj" \ "$(INTDIR)\GridCellUrl.obj" \ "$(INTDIR)\GridCellDateTime.obj" \ "$(INTDIR)\GridCellCheck.obj" \ "$(INTDIR)\GridCellCombo.obj" \ "$(INTDIR)\StdAfx.obj" "$(OUTDIR)\MFCGrid.lib" : "$(OUTDIR)" "$(INTDIR)" $(DEF_FILE) $(LIB32_OBJS) $(LIB32) @<< $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) << .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << GridCell.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "InPlaceEdit.h"\ "StdAfx.h"\ "TitleTip.h" GridCellBase.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "StdAfx.h"\ "TitleTip.h" GridCtrl.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "MemDC.h"\ "StdAfx.h"\ "TitleTip.h" GridDropTarget.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "StdAfx.h"\ "TitleTip.h" InPlaceEdit.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "InPlaceEdit.h"\ "StdAfx.h"\ "TitleTip.h" StdAfx.cpp : \ "StdAfx.h" TitleTip.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "StdAfx.h"\ "TitleTip.h" GridCellNumeric.cpp : \ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "InPlaceEdit.h"\ "StdAfx.h" GridCellDateTime.cpp : \ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" GridCellCheck.cpp : \ "GridCellCheck.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" GridCellCombo.cpp : \ "GridCellCombo.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" GridCellUrl.cpp : \ "GridCellUrl.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" SOURCE=GridCell.cpp "$(INTDIR)\GridCell.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellBase.cpp "$(INTDIR)\GridCellBase.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCtrl.cpp "$(INTDIR)\GridCtrl.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridDropTarget.cpp "$(INTDIR)\GridDropTarget.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=InPlaceEdit.cpp "$(INTDIR)\InPlaceEdit.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=StdAfx.cpp "$(INTDIR)\StdAfx.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=TitleTip.cpp "$(INTDIR)\TitleTip.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellNumeric.cpp "$(INTDIR)\GridCellNumeric.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellDateTime.cpp "$(INTDIR)\GridCellDateTime.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellCheck.cpp "$(INTDIR)\GridCellCheck.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellCombo.cpp "$(INTDIR)\GridCellCombo.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellUrl.cpp "$(INTDIR)\GridCellUrl.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) --- NEW FILE: GridCellCombo.h --- #if !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) #define AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 ///////////////////////////////////////////////////////////////////////////// // GridCellCombo.h : header file // // MFC Grid Control - Grid combo cell class header file // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.10 // ////////////////////////////////////////////////////////////////////// #include "GridCell.h" class CGridCellCombo : public CGridCell { friend class CGridCtrl; DECLARE_DYNCREATE(CGridCellCombo) public: CGridCellCombo(); // editing cells public: virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual CWnd* GetEditWnd() const; virtual void EndEdit(); // Operations public: virtual CSize GetCellExtent(CDC* pDC); // CGridCellCombo specific calls public: void SetOptions(const CStringArray& ar); void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; } DWORD GetStyle() { return m_dwStyle; } protected: virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); CStringArray m_Strings; DWORD m_dwStyle; }; class CGridCellList : public CGridCellCombo { DECLARE_DYNCREATE(CGridCellList) public: CGridCellList(); }; ///////////////////////////////////////////////////////////////////////////// // CComboEdit window #define IDC_COMBOEDIT 1001 class CComboEdit : public CEdit { // Construction public: CComboEdit(); // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CComboEdit) virtual BOOL PreTranslateMessage(MSG* pMsg); //}}AFX_VIRTUAL // Implementation public: virtual ~CComboEdit(); // Generated message map functions protected: //{{AFX_MSG(CComboEdit) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// // CInPlaceList window class CInPlaceList : public CComboBox { friend class CComboEdit; // Construction public: CInPlaceList(CWnd* pParent, // parent CRect& rect, // dimensions & location DWORD dwStyle, // window/combobox style UINT nID, // control ID int nRow, int nColumn, // row and column COLORREF crFore, COLORREF crBack, // Foreground, background colour CStringArray& Items, // Items in list CString sInitText, // initial selection UINT nFirstChar); // first character to pass to control // Attributes public: CComboEdit m_edit; // subclassed edit control // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CInPlaceList) protected: virtual void PostNcDestroy(); //}}AFX_VIRTUAL // Implementation public: virtual ~CInPlaceList(); void EndEdit(); protected: int GetCorrectDropWidth(); // Generated message map functions protected: //{{AFX_MSG(CInPlaceList) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnDropdown(); afx_msg void OnSelChange(); afx_msg UINT OnGetDlgCode(); afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); //}}AFX_MSG //afx_msg void OnSelendOK(); DECLARE_MESSAGE_MAP() private: int m_nNumLines; CString m_sInitText; int m_nRow; int m_nCol; UINT m_nLastChar; BOOL m_bExitOnArrows; COLORREF m_crForeClr, m_crBackClr; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) --- NEW FILE: GridCellURL.h --- // GridCellURL.h: interface for the CGridCellURL class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GridCellURL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_) #define AFX_GridCellURL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "GridCell.h" typedef struct { LPCTSTR szURLPrefix; int nLength; } URLStruct; class CGridCellURL : public CGridCell { DECLARE_DYNCREATE(CGridCellURL) public: CGridCellURL(); virtual ~CGridCellURL(); virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); // virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual LPCTSTR GetTipText() { return NULL; } void SetAutoLaunchUrl(BOOL bLaunch = TRUE) { m_bLaunchUrl = bLaunch; } BOOL GetAutoLaunchUrl() { return m_bLaunchUrl && !m_bEditing; } protected: virtual BOOL OnSetCursor(); virtual void OnClick(CPoint PointCellRelative); BOOL HasUrl(CString str); BOOL OverURL(CPoint& pt, CString& strURL); protected: #ifndef _WIN32_WCE static HCURSOR g_hLinkCursor; // Hyperlink mouse cursor HCURSOR GetHandCursor(); #endif static URLStruct g_szURIprefixes[]; protected: COLORREF m_clrUrl; COLORREF m_clrOld; BOOL m_bLaunchUrl; CRect m_Rect; }; #endif // !defined(AFX_GridCellURL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_) --- NEW FILE: GridCellDateTime.h --- // GridCellDateTime.h: interface for the CGridCellDateTime class. // // Provides the implementation for a datetime picker cell type of the // grid control. // // For use with CGridCtrl v2.22+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_) #define AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "GridCell.h" #include "afxdtctl.h" // for CDateTimeCtrl class CGridCellDateTime : public CGridCell { friend class CGridCtrl; DECLARE_DYNCREATE(CGridCellDateTime) CTime m_cTime; DWORD m_dwStyle; public: CGridCellDateTime(); CGridCellDateTime(DWORD dwStyle); virtual ~CGridCellDateTime(); // editing cells public: void Init(DWORD dwStyle); virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual CWnd* GetEditWnd() const; virtual void EndEdit(); virtual CSize GetCellExtent(CDC* pDC); CTime* GetTime() {return &m_cTime;}; void SetTime(CTime time); }; class CInPlaceDateTime : public CDateTimeCtrl { // Construction public: CInPlaceDateTime(CWnd* pParent, // parent CRect& rect, // dimensions & location DWORD dwStyle, // window/combobox style UINT nID, // control ID int nRow, int nColumn, // row and column COLORREF crFore, COLORREF crBack, // Foreground, background colour CTime* pcTime, UINT nFirstChar); // first character to pass to control // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CInPlaceList) protected: virtual void PostNcDestroy(); //}}AFX_VIRTUAL // Implementation public: virtual ~CInPlaceDateTime(); void EndEdit(); // Generated message map functions protected: //{{AFX_MSG(CInPlaceList) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg UINT OnGetDlgCode(); afx_msg void OnCloseUp ( NMHDR * pNotifyStruct, LRESULT* result ); //}}AFX_MSG //afx_msg void OnSelendOK(); DECLARE_MESSAGE_MAP() private: CTime* m_pcTime; int m_nRow; int m_nCol; UINT m_nLastChar; BOOL m_bExitOnArrows; COLORREF m_crForeClr, m_crBackClr; }; class CGridCellTime : public CGridCellDateTime { CGridCellTime():CGridCellDateTime(DTS_TIMEFORMAT) {} DECLARE_DYNCREATE(CGridCellTime) }; class CGridCellDateCal : public CGridCellDateTime { CGridCellDateCal():CGridCellDateTime() {} virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint /* point */, UINT nID, UINT nChar); DECLARE_DYNCREATE(CGridCellDateCal) }; #endif // !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_) --- NEW FILE: GridCell.h --- ///////////////////////////////////////////////////////////////////////////// // GridCell.h : header file // // MFC Grid Control - Grid cell class header file // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.20+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) #define AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CGridCtrl; #include "GridCellBase.h" // Each cell contains one of these. Fields "row" and "column" are not stored since we // will usually have acces to them in other ways, and they are an extra 8 bytes per // cell that is probably unnecessary. class CGridCell : public CGridCellBase { friend class CGridCtrl; DECLARE_DYNCREATE(CGridCell) // Construction/Destruction public: CGridCell(); virtual ~CGridCell(); // Attributes public: void operator=(const CGridCell& cell); virtual void SetText(LPCTSTR szText) { m_strText = szText; } virtual void SetImage(int nImage) { m_nImage = nImage; } virtual void SetData(LPARAM lParam) { m_lParam = lParam; } virtual void SetGrid(CGridCtrl* pGrid) { m_pGrid = pGrid; } // virtual void SetState(const DWORD nState); - use base class version virtual void SetFormat(DWORD nFormat) { m_nFormat = nFormat; } virtual void SetTextClr(COLORREF clr) { m_crFgClr = clr; } virtual void SetBackClr(COLORREF clr) { m_crBkClr = clr; } virtual void SetFont(const LOGFONT* plf); virtual void SetMargin(UINT nMargin) { m_nMargin = nMargin; } virtual CWnd* GetEditWnd() const { return m_pEditWnd; } virtual void SetCoords(int /*nRow*/, int /*nCol*/) {} // don't need to know the row and // column for base implementation virtual LPCTSTR GetText() const { return (m_strText.IsEmpty())? _T("") : LPCTSTR(m_strText); } virtual int GetImage() const { return m_nImage; } virtual LPARAM GetData() const { return m_lParam; } virtual CGridCtrl* GetGrid() const { return m_pGrid; } // virtual DWORD GetState() const - use base class virtual DWORD GetFormat() const; virtual COLORREF GetTextClr() const { return m_crFgClr; } // TODO: change to use default cell virtual COLORREF GetBackClr() const { return m_crBkClr; } virtual LOGFONT* GetFont() const; virtual CFont* GetFontObject() const; virtual UINT GetMargin() const; virtual BOOL IsEditing() const { return m_bEditing; } virtual BOOL IsDefaultFont() const { return (m_plfFont == NULL); } virtual void Reset(); // editing cells public: virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual void EndEdit(); protected: virtual void OnEndEdit(); protected: CString m_strText; // Cell text (or binary data if you wish...) LPARAM m_lParam; // 32-bit value to associate with item int m_nImage; // Index of the list view items icon DWORD m_nFormat; COLORREF m_crFgClr; COLORREF m_crBkClr; LOGFONT* m_plfFont; UINT m_nMargin; BOOL m_bEditing; // Cell being edited? CGridCtrl* m_pGrid; // Parent grid control CWnd* m_pEditWnd; }; // This class is for storing grid default values. It's a little heavy weight, so // don't use it in bulk class CGridDefaultCell : public CGridCell { DECLARE_DYNCREATE(CGridDefaultCell) // Construction/Destruction public: CGridDefaultCell(); virtual ~CGridDefaultCell(); public: virtual DWORD GetStyle() const { return m_dwStyle; } virtual void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; } virtual int GetWidth() const { return m_Size.cx; } virtual int GetHeight() const { return m_Size.cy; } virtual void SetWidth(int nWidth) { m_Size.cx = nWidth; } virtual void SetHeight(int nHeight) { m_Size.cy = nHeight; } // Disable these properties virtual void SetData(LPARAM /*lParam*/) { ASSERT(FALSE); } virtual void SetState(DWORD /*nState*/) { ASSERT(FALSE); } virtual DWORD GetState() const { return CGridCell::GetState()|GVIS_READONLY; } virtual void SetCoords( int /*row*/, int /*col*/) { ASSERT(FALSE); } virtual void SetFont(const LOGFONT* /*plf*/); virtual LOGFONT* GetFont() const; virtual CFont* GetFontObject() const; protected: CSize m_Size; // Default Size CFont m_Font; // Cached font DWORD m_dwStyle; // Cell Style - unused }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) --- NEW FILE: GridCellNumeric.h --- // GridCellNumeric.h: interface for the CGridCellNumeric class. // // Written by Andrew Truckle [ajt...@ws...] // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_) #define AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "GridCell.h" class CGridCellNumeric : public CGridCell { DECLARE_DYNCREATE(CGridCellNumeric) public: virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual void EndEdit(); }; #endif // !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_) --- NEW FILE: CellRange.h --- /////////////////////////////////////////////////////////////////////// // CellRange.h: header file // // MFC Grid Control - interface for the CCellRange class. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.20+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) #define AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // The code contained in this file is based on the original // WorldCom Grid control written by Joe Willcoxson, // mailto:chi...@ao... // http://users.aol.com/chinajoe class CCellID { // Attributes public: int row, col; // Operations public: explicit CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {} int IsValid() const { return (row >= 0 && col >= 0); } int operator==(const CCellID& rhs) const { return (row == rhs.row && col == rhs.col); } int operator!=(const CCellID& rhs) const { return !operator==(rhs); } }; class CCellRange { public: CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1) { Set(nMinRow, nMinCol, nMaxRow, nMaxCol); } void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1); int IsValid() const; int InRange(int row, int col) const; int InRange(const CCellID& cellID) const; int Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); } CCellID GetTopLeft() const; CCellRange Intersect(const CCellRange& rhs) const; int GetMinRow() const {return m_nMinRow;} void SetMinRow(int minRow) {m_nMinRow = minRow;} int GetMinCol() const {return m_nMinCol;} void SetMinCol(int minCol) {m_nMinCol = minCol;} int GetMaxRow() const {return m_nMaxRow;} void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;} int GetMaxCol() const {return m_nMaxCol;} void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;} int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;} int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;} void operator=(const CCellRange& rhs); int operator==(const CCellRange& rhs); int operator!=(const CCellRange& rhs); protected: int m_nMinRow; int m_nMinCol; int m_nMaxRow; int m_nMaxCol; }; inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol) { m_nMinRow = minRow; m_nMinCol = minCol; m_nMaxRow = maxRow; m_nMaxCol = maxCol; } inline void CCellRange::operator=(const CCellRange& rhs) { if (this != &rhs) Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol); } inline int CCellRange::operator==(const CCellRange& rhs) { return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) && (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol)); } inline int CCellRange::operator!=(const CCellRange& rhs) { return !operator==(rhs); } inline int CCellRange::IsValid() const { return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 && m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol); } inline int CCellRange::InRange(int row, int col) const { return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol); } inline int CCellRange::InRange(const CCellID& cellID) const { return InRange(cellID.row, cellID.col); } inline CCellID CCellRange::GetTopLeft() const { return CCellID(m_nMinRow, m_nMinCol); } inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const { return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol), min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol)); } #endif // !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) --- NEW FILE: GridCellBase.cpp --- // GridCellBase.cpp : implementation file // // MFC Grid Control - Main grid cell base class // // Provides the implementation for the base cell type of the // grid control. No data is stored (except for state) but default // implementations of drawing, printingetc provided. MUST be derived // from to be used. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.22+ // // History: // Ken Bertelson - 12 Apr 2000 - Split CGridCell into CGridCell and CGridCellBase // C Maunder - 19 May 2000 - Fixed sort arrow drawing (Ivan Ilinov) // C Maunder - 29 Aug 2000 - operator= checks for NULL font before setting (Martin Richter) // C Maunder - 15 Oct 2000 - GetTextExtent fixed (Martin Richter) // C Maunder - 1 Jan 2001 - Added ValidateEdit // Yogurt - 13 Mar 2004 - GetCellExtent fixed // // NOTES: Each grid cell should take care of it's own drawing, though the Draw() // method takes an "erase background" paramter that is called if the grid // decides to draw the entire grid background in on hit. Certain ambient // properties such as the default font to use, and hints on how to draw // fixed cells should be fetched from the parent grid. The grid trusts the // cells will behave in a certain way, and the cells trust the grid will // supply accurate information. // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "GridCtrl.h" #include "GridCellBase.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNAMIC(CGridCellBase, CObject) ///////////////////////////////////////////////////////////////////////////// // GridCellBase CGridCellBase::CGridCellBase() { Reset(); } CGridCellBase::~CGridCellBase() { } ///////////////////////////////////////////////////////////////////////////// // GridCellBase Operations void CGridCellBase::Reset() { m_nState = 0; } void CGridCellBase::operator=(const CGridCellBase& cell) { if (this == &cell) return; SetGrid(cell.GetGrid()); // do first in case of dependencies SetText(cell.GetText()); SetImage(cell.GetImage()); SetData(cell.GetData()); SetState(cell.GetState()); SetFormat(cell.GetFormat()); SetTextClr(cell.GetTextClr()); SetBackClr(cell.GetBackClr()); SetFont(cell.IsDefaultFont()? NULL : cell.GetFont()); SetMargin(cell.GetMargin()); } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Attributes // Returns a pointer to a cell that holds default values for this particular type of cell CGridCellBase* CGridCellBase::GetDefaultCell() const { if (GetGrid()) return GetGrid()->GetDefaultCell(IsFixedRow(), IsFixedCol()); return NULL; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Operations // EFW - Various changes to make it draw cells better when using alternate // color schemes. Also removed printing references as that's now done // by PrintCell() and fixed the sort marker so that it doesn't draw out // of bounds. BOOL CGridCellBase::Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd /*=TRUE*/) { // Note - all through this function we totally brutalise 'rect'. Do not // depend on it's value being that which was passed in. CGridCtrl* pGrid = GetGrid(); ASSERT(pGrid); if (!pGrid || !pDC) return FALSE; if( rect.Width() <= 0 || rect.Height() <= 0) // prevents imagelist item from drawing even return FALSE; // though cell is hidden //TRACE3("Drawing %scell %d, %d\n", IsFixed()? _T("Fixed ") : _T(""), nRow, nCol); int nSavedDC = pDC->SaveDC(); pDC->SetBkMode(TRANSPARENT); // Get the default cell implementation for this kind of cell. We use it if this cell // has anything marked as "default" CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return FALSE; // Set up text and background colours COLORREF TextClr, TextBkClr; TextClr = (GetTextClr() == CLR_DEFAULT)? pDefaultCell->GetTextClr() : GetTextClr(); if (GetBackClr() == CLR_DEFAULT) TextBkClr = pDefaultCell->GetBackClr(); else { bEraseBkgnd = TRUE; TextBkClr = GetBackClr(); } // Draw cell background and highlighting (if necessary) if ( IsFocused() || IsDropHighlighted() ) { // Always draw even in list mode so that we can tell where the // cursor is at. Use the highlight colors though. if(GetState() & GVIS_SELECTED) { TextBkClr = ::GetSysColor(COLOR_HIGHLIGHT); TextClr = ::GetSysColor(COLOR_HIGHLIGHTTEXT); bEraseBkgnd = TRUE; } rect.right++; rect.bottom++; // FillRect doesn't draw RHS or bottom if (bEraseBkgnd) { TRY { CBrush brush(TextBkClr); pDC->FillRect(rect, &brush); } CATCH(CResourceException, e) { //e->ReportError(); } END_CATCH } // Don't adjust frame rect if no grid lines so that the // whole cell is enclosed. if(pGrid->GetGridLines() != GVL_NONE) { rect.right--; rect.bottom--; } if (pGrid->GetFrameFocusCell()) { // Use same color as text to outline the cell so that it shows // up if the background is black. TRY { CBrush brush(TextClr); pDC->FrameRect(rect, &brush); } CATCH(CResourceException, e) { //e->ReportError(); } END_CATCH } pDC->SetTextColor(TextClr); // Adjust rect after frame draw if no grid lines if(pGrid->GetGridLines() == GVL_NONE) { rect.right--; rect.bottom--; } //rect.DeflateRect(0,1,1,1); - Removed by Yogurt } else if ((GetState() & GVIS_SELECTED)) { rect.right++; rect.bottom++; // FillRect doesn't draw RHS or bottom pDC->FillSolidRect(rect, ::GetSysColor(COLOR_HIGHLIGHT)); rect.right--; rect.bottom--; pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); } else { if (bEraseBkgnd) { rect.right++; rect.bottom++; // FillRect doesn't draw RHS or bottom CBrush brush(TextBkClr); pDC->FillRect(rect, &brush); rect.right--; rect.bottom--; } pDC->SetTextColor(TextClr); } // Draw lines only when wanted if (IsFixed() && pGrid->GetGridLines() != GVL_NONE) { CCellID FocusCell = pGrid->GetFocusCell(); // As above, always show current location even in list mode so // that we know where the cursor is at. BOOL bHiliteFixed = pGrid->GetTrackFocusCell() && pGrid->IsValid(FocusCell) && (FocusCell.row == nRow || FocusCell.col == nCol); // If this fixed cell is on the same row/col as the focus cell, // highlight it. if (bHiliteFixed) { rect.right++; rect.bottom++; pDC->DrawEdge(rect, BDR_SUNKENINNER /*EDGE_RAISED*/, BF_RECT); rect.DeflateRect(1,1); } else { CPen lightpen(PS_SOLID, 1, ::GetSysColor(COLOR_3DHIGHLIGHT)), darkpen(PS_SOLID, 1, ::GetSysColor(COLOR_3DDKSHADOW)), *pOldPen = pDC->GetCurrentPen(); pDC->SelectObject(&lightpen); pDC->MoveTo(rect.right, rect.top); pDC->LineTo(rect.left, rect.top); pDC->LineTo(rect.left, rect.bottom); pDC->SelectObject(&darkpen); pDC->MoveTo(rect.right, rect.top); pDC->LineTo(rect.right, rect.bottom); pDC->LineTo(rect.left, rect.bottom); pDC->SelectObject(pOldPen); rect.DeflateRect(1,1); } } // Draw Text and image #if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING) if (!pDC->m_bPrinting) #endif { CFont *pFont = GetFontObject(); ASSERT(pFont); if (pFont) pDC->SelectObject(pFont); } //rect.DeflateRect(GetMargin(), 0); - changed by Yogurt rect.DeflateRect(GetMargin(), GetMargin()); rect.right++; rect.bottom++; if (pGrid->GetImageList() && GetImage() >= 0) { IMAGEINFO Info; if (pGrid->GetImageList()->GetImageInfo(GetImage(), &Info)) { // would like to use a clipping region but seems to have issue // working with CMemDC directly. Instead, don't display image // if any part of it cut-off // // CRgn rgn; // rgn.CreateRectRgnIndirect(rect); // pDC->SelectClipRgn(&rgn); // rgn.DeleteObject(); /* // removed by Yogurt int nImageWidth = Info.rcImage.right-Info.rcImage.left+1; int nImageHeight = Info.rcImage.bottom-Info.rcImage.top+1; if( nImageWidth + rect.left <= rect.right + (int)(2*GetMargin()) && nImageHeight + rect.top <= rect.bottom + (int)(2*GetMargin()) ) { pGrid->GetImageList()->Draw(pDC, GetImage(), rect.TopLeft(), ILD_NORMAL); } */ // Added by Yogurt int nImageWidth = Info.rcImage.right-Info.rcImage.left; int nImageHeight = Info.rcImage.bottom-Info.rcImage.top; if ((nImageWidth + rect.left <= rect.right) && (nImageHeight + rect.top <= rect.bottom)) pGrid->GetImageList()->Draw(pDC, GetImage(), rect.TopLeft(), ILD_NORMAL); //rect.left += nImageWidth+GetMargin(); } } // Draw sort arrow if (pGrid->GetSortColumn() == nCol && nRow == 0) { CSize size = pDC->GetTextExtent(_T("M")); int nOffset = 2; // Base the size of the triangle on the smaller of the column // height or text height with a slight offset top and bottom. // Otherwise, it can get drawn outside the bounds of the cell. size.cy -= (nOffset * 2); if (size.cy >= rect.Height()) size.cy = rect.Height() - (nOffset * 2); size.cx = size.cy; // Make the dimensions square // Kludge for vertical text BOOL bVertical = (GetFont()->lfEscapement == 900); // Only draw if it'll fit! //if (size.cx + rect.left < rect.right + (int)(2*GetMargin())) - changed / Yogurt if (size.cx + rect.left < rect.right) { int nTriangleBase = rect.bottom - nOffset - size.cy; // Triangle bottom right //int nTriangleBase = (rect.top + rect.bottom - size.cy)/2; // Triangle middle right //int nTriangleBase = rect.top + nOffset; // Triangle top right //int nTriangleLeft = rect.right - size.cx; // Triangle RHS //int nTriangleLeft = (rect.right + rect.left - size.cx)/2; // Triangle middle //int nTriangleLeft = rect.left; // Triangle LHS int nTriangleLeft; if (bVertical) nTriangleLeft = (rect.right + rect.left - size.cx)/2; // Triangle middle else nTriangleLeft = rect.right - size.cx; // Triangle RHS CPen penShadow(PS_SOLID, 0, ::GetSysColor(COLOR_3DSHADOW)); CPen penLight(PS_SOLID, 0, ::GetSysColor(COLOR_3DHILIGHT)); if (pGrid->GetSortAscending()) { // Draw triangle pointing upwards CPen *pOldPen = (CPen*) pDC->SelectObject(&penLight); pDC->MoveTo( nTriangleLeft + 1, nTriangleBase + size.cy + 1); pDC->LineTo( nTriangleLeft + (size.cx / 2) + 1, nTriangleBase + 1 ); pDC->LineTo( nTriangleLeft + size.cx + 1, nTriangleBase + size.cy + 1); pDC->LineTo( nTriangleLeft + 1, nTriangleBase + size.cy + 1); pDC->SelectObject(&penShadow); pDC->MoveTo( nTriangleLeft, nTriangleBase + size.cy ); pDC->LineTo( nTriangleLeft + (size.cx / 2), nTriangleBase ); pDC->LineTo( nTriangleLeft + size.cx, nTriangleBase + size.cy ); pDC->LineTo( nTriangleLeft, nTriangleBase + size.cy ); pDC->SelectObject(pOldPen); } else { // Draw triangle pointing downwards CPen *pOldPen = (CPen*) pDC->SelectObject(&penLight); pDC->MoveTo( nTriangleLeft + 1, nTriangleBase + 1 ); pDC->LineTo( nTriangleLeft + (size.cx / 2) + 1, nTriangleBase + size.cy + 1 ); pDC->LineTo( nTriangleLeft + size.cx + 1, nTriangleBase + 1 ); pDC->LineTo( nTriangleLeft + 1, nTriangleBase + 1 ); pDC->SelectObject(&penShadow); pDC->MoveTo( nTriangleLeft, nTriangleBase ); pDC->LineTo( nTriangleLeft + (size.cx / 2), nTriangleBase + size.cy ); pDC->LineTo( nTriangleLeft + size.cx, nTriangleBase ); pDC->LineTo( nTriangleLeft, nTriangleBase ); pDC->SelectObject(pOldPen); } if (!bVertical) rect.right -= size.cy; } } // We want to see '&' characters so use DT_NOPREFIX GetTextRect(rect); rect.right++; rect.bottom++; DrawText(pDC->m_hDC, GetText(), -1, rect, GetFormat() | DT_NOPREFIX); pDC->RestoreDC(nSavedDC); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Mouse and Cursor events // Not yet implemented void CGridCellBase::OnMouseEnter() { TRACE0("Mouse entered cell\n"); } void CGridCellBase::OnMouseOver() { //TRACE0("Mouse over cell\n"); } // Not Yet Implemented void CGridCellBase::OnMouseLeave() { TRACE0("Mouse left cell\n"); } void CGridCellBase::OnClick( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse Left btn up in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } void CGridCellBase::OnClickDown( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse Left btn down in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } void CGridCellBase::OnRClick( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse right-clicked in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } void CGridCellBase::OnDblClick( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse double-clicked in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } // Return TRUE if you set the cursor BOOL CGridCellBase::OnSetCursor() { #ifndef _WIN32_WCE_NO_CURSOR SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); #endif return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase editing void CGridCellBase::OnEndEdit() { ASSERT( FALSE); } BOOL CGridCellBase::ValidateEdit(LPCTSTR str) { UNUSED_ALWAYS(str); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Sizing BOOL CGridCellBase::GetTextRect( LPRECT pRect) // i/o: i=dims of cell rect; o=dims of text rect { if (GetImage() >= 0) { IMAGEINFO Info; CGridCtrl* pGrid = GetGrid(); CImageList* pImageList = pGrid->GetImageList(); if (pImageList && pImageList->GetImageInfo( GetImage(), &Info)) { int nImageWidth = Info.rcImage.right-Info.rcImage.left; //+1; pRect->left += nImageWidth + GetMargin(); } } return TRUE; } // By default this uses the selected font (which is a bigger font) CSize CGridCellBase::GetTextExtent(LPCTSTR szText, CDC* pDC /*= NULL*/) { CGridCtrl* pGrid = GetGrid(); ASSERT(pGrid); BOOL bReleaseDC = FALSE; if (pDC == NULL || szText == NULL) { if (szText) pDC = pGrid->GetDC(); if (pDC == NULL || szText == NULL) { CGridDefaultCell* pDefCell = (CGridDefaultCell*) GetDefaultCell(); ASSERT(pDefCell); return CSize(pDefCell->GetWidth(), pDefCell->GetHeight()); } bReleaseDC = TRUE; } CFont *pOldFont = NULL, *pFont = GetFontObject(); if (pFont) pOldFont = pDC->SelectObject(pFont); CSize size; int nFormat = GetFormat(); // If the cell is a multiline cell, then use the width of the cell // to get the height if ((nFormat & DT_WORDBREAK) && !(nFormat & DT_SINGLELINE)) { CString str = szText; int nMaxWidth = 0; while (TRUE) { int nPos = str.Find(_T('\n')); CString TempStr = (nPos < 0)? str : str.Left(nPos); int nTempWidth = pDC->GetTextExtent(TempStr).cx; if (nTempWidth > nMaxWidth) nMaxWidth = nTempWidth; if (nPos < 0) break; str = str.Mid(nPos + 1); // Bug fix by Thomas Steinborn } CRect rect; rect.SetRect(0,0, nMaxWidth+1, 0); pDC->DrawText(szText, -1, rect, nFormat | DT_CALCRECT); size = rect.Size(); } else size = pDC->GetTextExtent(szText, _tcslen(szText)); // Removed by Yogurt //TEXTMETRIC tm; //pDC->GetTextMetrics(&tm); //size.cx += (tm.tmOverhang); if (pOldFont) pDC->SelectObject(pOldFont); size += CSize(2*GetMargin(), 2*GetMargin()); // Kludge for vertical text LOGFONT *pLF = GetFont(); if (pLF->lfEscapement == 900 || pLF->lfEscapement == -900) { int nTemp = size.cx; size.cx = size.cy; size.cy = nTemp; size += CSize(0, 4*GetMargin()); } if (bReleaseDC) pGrid->ReleaseDC(pDC); return size; } CSize CGridCellBase::GetCellExtent(CDC* pDC) { CSize size = GetTextExtent(GetText(), pDC); CSize ImageSize(0... [truncated message content] |
From: jw <jw...@us...> - 2005-11-01 12:34:56
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15861 Added Files: Changes Grid.pm Grid.xs MANIFEST Makefile.PL README TYPEMAP Log Message: Added to repository --- NEW FILE: Makefile.PL --- use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Win32::GUI::Grid', 'VERSION_FROM' => 'Grid.pm', 'XS' => { 'Grid.xs' => 'Grid.cpp' }, 'LIBS' => ['Comctl32.lib Mfc42.lib Eafxis.lib'], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' 'INC' => '', # e.g., '-I/usr/include/other' 'MYEXTLIB' => './MFCGrid/Lib/MFCGrid.lib', ($] ge '5.005') ? ( 'AUTHOR' => 'ROCHER Laurent (lr...@cp...)', 'ABSTRACT' => 'Add a Grid control to Win32::GUI (MFC Grid from CodeProject.com)', ) : (), ); sub MY::xs_c { ' .xs.c: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c .xs.cpp: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp ./MFCGrid/Lib/MFCGrid.lib: MFCGrid/makefile cd MFCGrid nmake cd .. '; } --- NEW FILE: MANIFEST --- Makefile.PL Changes Grid.pm Grid.xs MANIFEST TYPEMAP MFCGrid/Makefile --- NEW FILE: Grid.xs --- /**********************************************************************/ /* G R I D . x s */ /**********************************************************************/ ////////////////////////////////////////////////////////////////////// // Include ////////////////////////////////////////////////////////////////////// // // MFC // #define _AFX_NOFORCE_LIBS // not force library #define _WINDLL // Windows DLL #define _USRDLL // #define _AFXDLL // Use shared MFC #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include <afxwin.h> // MFC core and standard components [...3241 lines suppressed...] object->m_SvSub = NULL; object->SetCompareFunction(NULL); } else if (nCol < object->GetColumnCount()) { pFun = (SV*) object->m_RowSortFunc.GetAt (nCol); if (pFun != NULL) { SvREFCNT_dec (pFun); object->m_RowSortFunc.SetAtGrow(nCol, NULL); } } } # // in-built sort functions # static int CALLBACK pfnCellTextCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); # static int CALLBACK pfnCellNumericCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); # # ################################################################## --- NEW FILE: Grid.pm --- package Win32::GUI::Grid; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp 'croak','carp'; use Win32::GUI; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader Win32::GUI::Window); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw ( GVL_NONE GVL_HORZ [...1199 lines suppressed...] =item C<_GetData> (nRow, nCol) [virtual Mode Only] Must return data cell. =item C<_CacheHint> (nMinRow, nMinCol, nMaxRow, nMaxCol) [virtual Mode Only] Range before request data. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage : http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut --- NEW FILE: README --- Win32::GUI::Grid version 0.07 ============================= Win32::GUI::Grid add a grid control to Win32::GUI. This module use MFC Grid control By Chris Maunder. Url : http://www.codeproject.com/miscctrl/gridctrl.asp (Modified sources code include) INSTALLATION To install this module type the following: perl Makefile.PL make make install DEPENDENCIES This module requires these other modules and libraries: Win32::GUI Microsoft Foudation Classes (MFC) WEB PAGE AND PPM REPOSITORY See: http://perso.club-internet.fr/rocherl/Win32GUI.html COPYRIGHT AND LICENCE Copyright 2003 by Laurent Rocher (lr...@cp...). This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html>. --- NEW FILE: Changes --- Revision history for Perl extension Win32::GUI::Grid. 0.07 14/02/2004 - Use MFC Grid control 2.25 - Correct EnsureCellVisible methods ( bad name in XS, but keep EnsureVisible for compatibility) - Fix locale setting problem. 0.06 14/02/2004 - Fix Clipboard error (Ctrl+C) [Thank to Andrew St. Denis] - Fix some Grid draw problem - Add WM_PRINTCLIENT support for new Win32::GUI -noflicker option. - New Cell Type (Calendar, URL) - SetCellOptions : New options 0.05 07/09/2003 - Add SetCellEditable method. - Add List cell editing. - New event _ChangedEdit for COMBO and LIST edit control when select change in list. 0.04 07/08/2003 - Correct -heigth option. - In InsertColumn, set last parameter optional. - Add Column Perl Sort method. 0.03 03/06/2003 - Correct Abnormal terminaison when multiple grid instance 0.02 03/06/2003 - Correct crash when destroy grid during cell edit. - Virtual Mode support. - New cell editing support. + Numeric + Date + Time + Check + Combo - Add Perl Sort method. 0.01 28/05/2003 - First build Win32::GUI::Grid - Use MFC Grid control 2.24 TODO - Printing support (???) --- NEW FILE: TYPEMAP --- TYPEMAP LPCTSTR T_PV LPCSTR T_PV LPTSTR T_PV DWORD T_IV UINT T_IV BOOL T_IV HBITMAP T_HANDLE HDC T_HANDLE HFONT T_HANDLE HIMAGELIST T_HANDLE HWND T_HANDLE CMFCWnd* T_MFCWND COLORREF T_COLOR ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { if(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0) != NULL) $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0))); else $var = NULL; } else $var = ($type) SvIV($arg); T_MFCWND $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-CMFCWnd\", 8, 0))); T_COLOR $var = SvCOLORREF(aTHX_ $arg); ################################################################################ OUTPUT T_HANDLE sv_setiv($arg, (IV) $var); T_COLOR sv_setiv($arg, (IV) $var); |
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15861/samples Added Files: one.bmp test1.pl test2.pl test3.pl test4.pl test5.pl test6.pl three.bmp two.bmp Log Message: Added to repository --- NEW FILE: test5.pl --- #! perl -w # # - Custom Cell Type # - Sort function # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 5", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid", -pos => [0, 0], ) or die "new Grid"; # Grid cell base $Grid->SetDefCellType(GVIT_NUMERIC); # Preset Cell type before cell creation # Init Grid $Grid->SetEditable(1); $Grid->SetRows(10); $Grid->SetColumns(10); $Grid->SetFixedRows(1); $Grid->SetFixedColumns(1); # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellText($row, $col,"Column : $col"); } elsif ($col == 0) { $Grid->SetCellText($row, $col, "Row : $row"); } else { # $Grid->SetCellType($row, $col, GVIT_NUMERIC); # Set cell type after creation. $Grid->SetCellText($row, $col, $row*$col); } } } # Set Date edit control in cell (1,1) $Grid->SetCellText(1, 1, ""); $Grid->SetCellType(1, 1, GVIT_DATE); # Set Date edit control in cell (1,1) $Grid->SetCellText(2, 1, ""); $Grid->SetCellType(2, 1, GVIT_DATECAL); # Set Time edit control in cell (1,2) $Grid->SetCellText(1, 2, ""); $Grid->SetCellType(1, 2, GVIT_TIME); # Set Check edit control in cell (1,3) $Grid->SetCellText(1, 3, ""); $Grid->SetCellType(1, 3, GVIT_CHECK); $Grid->SetCellCheck(1, 3, 1); print "Cell Check : ", $Grid->GetCellCheck(1, 3), "\n"; # Set Combobox edit control in cell (1,4) $Grid->SetCellText(1, 4, ""); $Grid->SetCellType(1, 4, GVIT_COMBO); $Grid->SetCellOptions(1, 4, ["Option 1", "Option 2", "Option 3"]); # Set Listbox control in cell (1,5) $Grid->SetCellText(1, 5, ""); $Grid->SetCellType(1, 5, GVIT_LIST); $Grid->SetCellOptions(1, 5, ["Option 1", "Option 2", "Option 3"]); # Set Url control in cell (1,6) $Grid->SetCellText(1, 6, "www.perl.com"); $Grid->SetCellType(1, 6, GVIT_URL); $Grid->SetCellOptions(1, 6, -autolaunch => 0); # Set Url control in cell (2,6) $Grid->SetCellText(2, 6, "www.perl.com"); $Grid->SetCellType(2, 6, GVIT_URL); # Set uneditable cell (2,6) $Grid->SetCellEditable(2, 6, 0); # Sort Numeric reverse order (Method 1) # $Grid->SortNumericCells(5, 0); # Sort Numeric reverse order (Method 2) # $Grid->SortCells(5, 0, sub { my ($e1, $e2) = @_; return (int($e1) - int ($e2)); } ); # Sort Numeric reverse order (Method 3) # $Grid->SetSortFunction (sub { my ($e1, $e2) = @_; return (int($e1) - int ($e2)); } ); # $Grid->SortCells(7, 0); # $Grid->SetSortFunction (); # remove sort method # Resize Grid Cell $Grid->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } sub Grid_BeginEdit { my ($col, $row) = @_; print "Begin Edit ($col, $row)\n"; } sub Grid_ChangedEdit { my ($col, $row, $str) = @_; print "Changed Edit ($col, $row, $str)\n"; } sub Grid_EndEdit { my ($col, $row) = @_; print "End Edit ($col, $row)\n"; } --- NEW FILE: two.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: test3.pl --- #! perl -w # # Test Grid method # - Default cell setting # - font method # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 3", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = $Window->AddGrid ( -name => "Grid", -pos => [0, 0], ) or die "new Grid"; # Image list my $IL = new Win32::GUI::ImageList(16, 16, 24, 3, 10); $IL->Add("one.bmp"); $IL->Add("two.bmp"); $IL->Add("three.bmp"); # Attach ImageList to grid $Grid->SetImageList($IL); # Set default cell style $Grid->SetDefCellTextColor(0,0, '#FF0000'); $Grid->SetDefCellTextColor(1,0, '#00FF00'); $Grid->SetDefCellTextColor(0,1, '#0000FF'); $Grid->SetDefCellBackColor(0,0, '#0000FF'); $Grid->SetDefCellBackColor(1,0, '#FF0000'); $Grid->SetDefCellBackColor(0,1, '#00FF00'); $Grid->SetDefCellFormat(0, 0, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetDefCellFormat(0, 1, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetDefCellFormat(1, 0, DT_LEFT|DT_WORDBREAK); # Change default font my %font = $Grid->GetDefCellFont(0,0); $font {-bold} = 1; $font {-height} = 10; $Grid->SetDefCellFont(0,0, %font); # Create Cells after set default style. (required for format ONLY) $Grid->SetRows(50); $Grid->SetColumns(10); $Grid->SetFixedRows(1); $Grid->SetFixedColumns(1); # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellText($row, $col,"Column : $col"); $Grid->SetCellImage($row, $col, 0); # Add bitmap } elsif ($col == 0) { $Grid->SetCellText($row, $col, "Row : $row"); $Grid->SetCellImage($row, $col, 1); # Add bitmap } else { $Grid->SetCellText($row, $col, "Cell : ($row,$col)"); $Grid->SetCellImage($row, $col, 2); # Add bitmap } } } # Set Cell font $Grid->SetCellFont(0, 0, -name => 'Arial' , -size => 12, -italic => 1, -bold => 1); # Set font from a Win32::GUI::Font my $F = new Win32::GUI::Font( -name => "MS Sans Serif", -size => 10, -bold => 1, ); $Grid->SetCellFont(0, 1, $F->Info()); # Resize Grid Cell $Grid->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } sub Grid_Click { my ($row, $col) = @_; # Get font information print "\nFont for cell ($row, $col) :\n"; my %font = $Grid->GetCellFont($row, $col); for my $key (keys %font) { print $key, " => ", $font{$key}, "\n"; } } --- NEW FILE: test2.pl --- #! perl -w # # Test Grid method # - create option # - Color method # - ImageList support # - Event # - POINT, RECT method. use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 2", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = $Window->AddGrid ( -name => "Grid", -pos => [0, 0], -rows => 50, -columns => 10, -fixedrows => 1, -fixedcolumns => 1, -editable => 1, ) or die "new Grid"; # Image list my $IL = new Win32::GUI::ImageList(16, 16, 24, 3, 10); $IL->Add("one.bmp"); $IL->Add("two.bmp"); $IL->Add("three.bmp"); # Attach ImageList to grid $Grid->SetImageList($IL); # Change some color (different color format) $Grid->SetGridBkColor([66,66,66]); $Grid->SetGridLineColor('#0000ff'); $Grid->SetTitleTipBackClr('#00ff00'); $Grid->SetDefCellTextColor(0,0, 0x9F9F9F); $Grid->SetDefCellBackColor(0,0, 0x003300); # Some test my ($x, $y) = $Grid->GetCellOrigin(1, 1); print "CellOrigine(1,1) = ($x, $y)\n"; my ($left, $top, $right, $bottom) = $Grid->GetCellRect(1,1); print "GetCellRect(1,1) ($left, $top, $right, $bottom)\n"; ($left, $top, $right, $bottom) = $Grid->GetTextRect(1,1); print "GetTextRect(1,1) ($left, $top, $right, $bottom)\n"; ($x, $y) = $Grid->GetCellFromPt(85, 50); print "GetCellFromPt(85,50) = ($x, $y)\n"; # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellFormat($row, $col, DT_LEFT|DT_WORDBREAK); $Grid->SetCellText($row, $col,"Column : $col"); $Grid->SetCellImage($row, $col, 0); # Add bitmap } elsif ($col == 0) { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Row : $row"); $Grid->SetCellImage($row, $col, 1); # Add bitmap } else { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Cell : ($row,$col)"); $Grid->SetCellImage($row, $col, 2); # Add bitmap } } } # Resize Grid Cell $Grid->AutoSize(); # Some test ($x, $y) = $Grid->GetCellOrigin(1, 1); print "CellOrigine(1,1) = ($x, $y)\n"; ($left, $top, $right, $bottom) = $Grid->GetCellRect(1,1); print "GetCellRect(1,1) ($left, $top, $right, $bottom)\n"; ($left, $top, $right, $bottom) = $Grid->GetTextRect(1,1); print "GetTextRect(1,1) ($left, $top, $right, $bottom)\n"; ($x, $y) = $Grid->GetCellFromPt(85, 50); print "GetCellFromPt(85,50) = ($x, $y)\n"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } sub Grid_Click { my ($col, $row) = @_; print "Click ($col, $row)\n"; } sub Grid_RClick { my ($col, $row) = @_; print "Right Click ($col, $row)\n"; } sub Grid_DblClick { my ($col, $row) = @_; print "Double Click ($col, $row)\n"; } sub Grid_Changing { my ($col, $row) = @_; print "Selection Changing ($col, $row)\n"; } sub Grid_Changed { my ($col, $row) = @_; print "Selection Changed ($col, $row)\n"; } sub Grid_BeginEdit { my ($col, $row) = @_; print "Begin Edit ($col, $row)\n"; } sub Grid_EndEdit { my ($col, $row) = @_; print "End Edit ($col, $row)\n"; } sub Grid_BeginDrag { my ($col, $row) = @_; print "Begin Drag ($col, $row)\n"; } --- NEW FILE: one.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: test4.pl --- #! perl -w # # Test Grid method # - Virtual mode # - EndEdit event in virtual mode # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 4", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = $Window->AddGrid ( -name => "Grid", -pos => [0, 0], -rows => 50, # Use create option -columns => 10, -fixedrows => 1, -fixedcolumns => 1, -editable => 1, -virtual => 1, ) or die "new Grid"; # $Grid->SetVirtualMode(1); # Set virtual before set rows and columns # $Grid->SetRows(50); # $Grid->SetColumns(10); # $Grid->SetFixedRows(1); # $Grid->SetFixedColumns(1); # $Grid->SetEditable(1); $Grid->SetCellBkColor(2, 2, 0xFF0000); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } # Virtual Grid request data sub Grid_GetData { my ($row, $col) = @_; return "Cell ($row, $col)"; } sub Grid_EndEdit { my ($col, $row, $str) = @_; print "End Edit ($col, $row) = $str\n"; return 1; } --- NEW FILE: test6.pl --- #! perl -w # # Test multiple Grid instance # noflicker Win32::GUI support # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 6", -pos => [100, 100], -size => [400, 400], -name => "Window", -noflicker => 1, ) or die "new Window"; # Grid Window my $Grid = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid", -pos => [0, 0], -rows => 10, -columns => 10, -fixedrows => 1, -fixedcolumns => 1, ) or die "new Grid"; my $Grid2 = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid2", -pos => [0, 0], -rows => 10, -columns => 10, -fixedrows => 1, -fixedcolumns => 1, ) or die "new Grid2"; # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellText($row, $col,"Column : $col"); $Grid2->SetCellText($row, $col,"Column : $col"); } elsif ($col == 0) { $Grid->SetCellText($row, $col, "Row : $row"); $Grid2->SetCellText($row, $col, "Row : $row"); } else { $Grid->SetCellText($row, $col, $row*$col); $Grid2->SetCellText($row, $col, $row*$col); } } } # Resize Grid Cell $Grid->AutoSize(); $Grid2->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height/2); $Grid2->Move (0, $height/2); $Grid2->Resize ($width, $height/2); } sub Grid_Click { my ($row, $col) = @_; print "Grid cell ($row, $col)\n"; } sub Grid2_Click { my ($row, $col) = @_; print "Grid2 cell ($row, $col)\n"; } --- NEW FILE: test1.pl --- #! perl -w # # Test Basic Grid method # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 1", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid", -pos => [0, 0], ) or die "new Grid"; # Init Grid $Grid->SetEditable(1); $Grid->SetRows(50); $Grid->SetColumns(10); $Grid->SetFixedRows(1); $Grid->SetFixedColumns(1); # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellFormat($row, $col, DT_LEFT|DT_WORDBREAK); $Grid->SetCellText($row, $col,"Column : $col"); } elsif ($col == 0) { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Row : $row"); } else { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Cell : ($row,$col)"); } } } # Resize Grid Cell $Grid->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } --- NEW FILE: three.bmp --- (This appears to be a binary file; contents omitted.) |
From: jw <jw...@us...> - 2005-11-01 12:33:40
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15758/samples Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-Grid/samples added to the repository |
From: jw <jw...@us...> - 2005-11-01 12:33:40
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/MFCGrid In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15758/MFCGrid Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-Grid/MFCGrid added to the repository |
From: jw <jw...@us...> - 2005-11-01 12:32:43
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15455/Samples Added Files: DHtmlEdit.pl DHtmlEdit.pm DHtmlEditor.pl Google.pl Info.bat InfoControl.pl MShtml.pl Movie.avi MovieControl.pl MsFlexGrid.pl SCGrid.pl TestOLE.pl WebBrowser.pl Log Message: Added to repository --- NEW FILE: MsFlexGrid.pl --- # perl -w # # Hosting MsFlexGrid : Test Indexed properties # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "MSFlexGridLib.MSFlexGrid", ) or die "new Control"; # Test Enum property set by string value # $Control->SetProperty("ScrollBars", "flexScrollBarNone"); # $Control->SetProperty("GridLines", "flexGridInset"); $Control->SetProperty("Rows", 5); $Control->SetProperty("Cols", 5); $Control->SetProperty("TextMatrix", 1, 2, "Hello!!!"); $r = $Control->GetProperty("Rows"); $c = $Control->GetProperty("Cols"); $t = $Control->GetProperty("TextMatrix", 1, 2); print "Rows = $r, Cols = $c, TextMatrix(1,2) = $t\n"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: Movie.avi --- (This appears to be a binary file; contents omitted.) --- NEW FILE: WebBrowser.pl --- # perl -w # # Hosting a WebBrowser # Create a WebBrowser and register an event. # Enumerate Property, Methods and Events and create a Html file. # Load Html file in WebBrowser. # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "Shell.Explorer.2", # -control => "{8856F961-340A-11D0-A96B-00C04FD705A2}", ) or die "new Control"; # Register Event $Control->RegisterEvent("StatusTextChange", sub { $self = shift; $id = shift; print "Event : ", @_, "\n"; } ); # Enum Property info open (F, ">Webbrowser.html") or die "open"; print F '<HTML><BODY><HR><H1>Properties</H1><HR>'; foreach $id ($Control->EnumPropertyID()) { %property = $Control->GetPropertyInfo ($id); foreach $key (keys %property) { print F "<B>$key</B> = ", $property {$key}, "<BR>"; } print F "<P>"; } # Enum Method info print F "<P><HR><H1>Methods</H1><HR>"; foreach $id ($Control->EnumMethodID()) { %method = $Control->GetMethodInfo ($id); foreach $key (keys %method) { print F "<B>$key</B> = ", $method {$key}, "<BR>"; } print F "<P>"; } # Enum Event info print F "<P><HR><H1>Events</H1><HR>"; foreach $id ($Control->EnumEventID()) { %event = $Control->GetEventInfo ($id); foreach $key (keys %event) { print F "<B>$key</B> = ", $event {$key}, "<BR>"; } print F "<P>"; } print F "</BODY></HTML>"; close (F); # Method call $dir = cwd; $path = "file://$dir/Webbrowser.html"; # print $path, "\n"; $Control->CallMethod("Navigate", $path); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: DHtmlEdit.pm --- # # Win32::GUI::DHtmlEdit : wrapper package for DHtmlEdit ActiveX # by Laurent Rocher. # # TODO : Check ExecuteCommand (Some commande have parametre) # TODO : Check QueryStatus (Usefull for all) # package Win32::GUI::DHtmlEdit; use strict; use vars qw(@ISA $VERSION); use Carp 'croak','carp'; use Win32::GUI::AxWindow; @ISA = qw(Win32::GUI::AxWindow Exporter); $VERSION = "1.0"; [...1362 lines suppressed...] my ($self, $callback) = @_; $self->RegisterEvent ("onblur", $callback); } # # onreadystatechange # sub OnReadyStateChange { croak("Usage: OnReadyStateChange (CallBack)") if (@_ != 2); my ($self, $callback) = @_; $self->RegisterEvent ("onreadystatechange", $callback); } 1; --- NEW FILE: DHtmlEdit.pl --- # perl -w # # Hosting DHtmlEdit basic # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "{2D360200-FFF5-11D1-8D03-00A0C959BC0A}", ) or die "new Control"; # Method call $Control->CallMethod("NewDocument"); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { # Print Html Text print $Control->GetProperty("DocumentHTML"); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: MovieControl.pl --- # perl -v # # Hosting Movie Control (A movie player control see http://www.viscomsoft.com/movieplayer.htm) # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Movie Control Test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], # -control => "{F4A32EAF-F30D-466D-BEC8-F4ED86CAF84E}", -control => "MOVIEPLAYER.MoviePlayerCtrl.1", ) or die "new Control"; # Load Avi file $Control->SetProperty("FileName", "movie.avi"); # Event loop $Window->Show(); # Start Avi player $Control->CallMethod("Play"); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { # Release all before destroy window # $Control->Release(); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: SCGrid.pl --- # perl -w # # Hosting SCGrid (A freeware Grid ActiveX see : http://www.scgrid.com/) # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "prjSCGrid.SCGrid", ) or die "new Control"; # Redraw Off $Control->SetProperty("Redraw", 0); # Create 1 Fixed col and Row $Control->SetProperty("FixedRows", 1); $Control->SetProperty("FixedCols", 1); # Create 5 col and Row $Control->SetProperty("Rows", 5); $Control->SetProperty("Cols", 5); # Adjust grid on column $Control->SetProperty("AdjustLast", "scColumn"); # Add Resize column mode $Control->SetProperty("ResizeMode", "scColumn"); # Fill Cell for $C (0..4) { for $R (0..4) { $Control->SetProperty("Text", $R, $C, "Cell ($R, $C)"); } } # Fill Fixed Rows $Control->SetProperty("Text", -1, -1, " "); for $R (0..4) { $Control->SetProperty("Text", $R, -1, "$R"); } $Control->CallMethod("AdjustWidth", -1, -32767); # Force optional value # Fill Fixed Cols and adjust size for $C (0..4) { $Control->SetProperty("Text", -1, $C, "FixedCol($C)"); $Control->CallMethod("AdjustWidth", $C, -32767); # Force optional value } # Enable draw mode $Control->SetProperty("Redraw", 1); # Some property get $r = $Control->GetProperty("Rows"); $c = $Control->GetProperty("Cols"); $t = $Control->GetProperty("Text", 1, 2); print "Rows = $r, Cols = $c, Text(1,2) = $t\n"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: TestOLE.pl --- # perl -W # # Host with AxWindow and manipulate with Win32::OLE # - Use GetOLE # - Call method # - Write in a HTML document # use Cwd; use Win32::GUI; use Win32::OLE; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow and Win32::OLE", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # A button $Button = new Win32::GUI::Button ( -parent => $Window, -name => "Button", -pos => [0, 25], -size => [400, 50], -text => "Click me !!!", ); # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 100], -size => [400, 300], -control => "Shell.Explorer.2", ) or die "new Control"; # Get Ole object $OLEControl = $Control->GetOLE(); # $OLEControl->Navigate("about:blank"); # Clear control $OLEControl->Navigate("http://www.google.com/"); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Button Event sub Button_Click { $OLEControl->{Document}->{body}->insertAdjacentHTML("BeforeEnd","Click !!!"); print "HTML = ", $OLEControl->{Document}->{body}->innerHTML, "\n"; } # Main window event handler sub Window_Terminate { # Release all before destroy window undef $OLEControl; $Control->Release(); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Button->Move(0,25); $Button->Resize ($width, 50); $Control->Move (0, 100); $Control->Resize ($width, $height-100); } } --- NEW FILE: DHtmlEditor.pl --- # perl -w # # Hosting DHtmlEdit and use wrapper package # # use Cwd; use Win32::GUI; use DHtmlEdit; my $HtmlFile = ""; my $Directory = cwd; # main menu my $Menu = Win32::GUI::MakeMenu( "&File" => "File", " > &New..." => "FileNew", " > &Open..." => "FileOpen", " > -" => 0, " > &Save" => "FileSave", " > Save &As..." => "FileSaveAs", " > -" => 0, " > &Print" => "FilePrint", " > -" => 0, " > &Directory..." => "FileDirectory", " > -" => 0, " > E&xit" => "FileExit", "&Edit" => "Edit", " > &Undo" => "EditUndo", " > &Redo" => "EditRedo", " > -" => 0, " > Cu&t" => "EditCut", " > &Copy" => "EditCopy", " > &Paste" => "EditPaste", " > -" => 0, " > &Select All" => "EditSelectAll", " > &Delete" => "EditDelete", " > -" => 0, " > &Find " => "EditFind", "&Format" => "Format", " > &Bold" => "FormatBold", " > &Italic" => "FormatItalic", " > &Underline" => "FormatUnderline", " > &Font..." => "FormatFont", " > -" => 0, " > Justify &Left" => "FormatJustifyLeft", " > Justify &Center" => "FormatJustifyCenter", " > Justify &Right" => "FormatJustifyRight", " > -" => 0, " > &Indent" => "FormatIndent", " > &Outdent" => "FormatOutdent", "&Insert" => "Insert", " > &HyperLink..." => "InsertHyperLink", " > &Image..." => "InsertImage", " > -" => 0, " > &OrderList" => "InsertOrderList", " > &UnOrderList" => "InsertUnOrderList", " > -" => 0, " > &Unlink" => "InsertUnlink", "&Help" => "Help", " > &About" => "HelpAbout", ); # main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -menu => $Menu, ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::DHtmlEdit ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], ) or die "new Control"; # Method call $Control->DocumentHTML('<HTML><BODY><B>Hello World !!!</B></BODY></HTML>'); # Event handler $Control->OnDisplayChanged ( "Event_DisplayChanged" ); # Event loop $Window->Show(); Win32::GUI::Dialog(); sub Event_DisplayChanged { my $self = shift; # Check Edit menu if ($Control->QueryUndo() == 3) { $Menu->{EditUndo}->Enabled(1); } else { $Menu->{EditUndo}->Enabled(0); } if ($Control->QueryRedo() == 3) { $Menu->{EditRedo}->Enabled(1); } else { $Menu->{EditRedo}->Enabled(0); } if ($Control->QueryCut() == 3) { $Menu->{EditCut}->Enabled(1); } else { $Menu->{EditCut}->Enabled(0); } if ($Control->QueryCopy() == 3) { $Menu->{EditCopy}->Enabled(1); } else { $Menu->{EditCopy}->Enabled(0); } if ($Control->QueryPaste() == 3) { $Menu->{EditPaste}->Enabled(1); } else { $Menu->{EditPaste}->Enabled(0); } if ($Control->QuerySelectAll() == 3) { $Menu->{EditSelectAll}->Enabled(1); } else { $Menu->{EditSelectAll}->Enabled(0); } if ($Control->QueryDelete() == 3) { $Menu->{EditDelete}->Enabled(1); } else { $Menu->{EditDelete}->Enabled(0); } } # Finish method sub Finish { # Change after last save. if ($Control->IsDirty()) { FileSave_Click(); } return -1; } # Main window event handler sub Window_Terminate { return Finish (); } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } ####################################################################### # # File Menu # ####################################################################### # New sub FileNew_Click { $Control->NewDocument (); $HtmlFile = ""; } # Open sub FileOpen_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Open html File", -filter => [ "Html Document (*.htm, *.html)" => "*.htm;*.html", "All files", "*.*", ], -directory => $Directory, ); if ($ret) { $HtmlFile = $ret; $Control->LoadDocument ($HtmlFile); } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetOpenFileName Error"); } } # Save sub FileSave_Click { unless ($HtmlFile eq "") { my $ret = Win32::GUI::MessageBox (0, "Overwrite existing file ?", "Save",MB_ICONQUESTION | MB_YESNOCANCEL); if ($ret == 6) { $ret = $Control->SaveDocument ($HtmlFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveDocument ", "Save Error"); } } elsif ($ret == 7) { FileSaveAs_Click(); } } else { FileSaveAs_Click(); } } # SaveAs sub FileSaveAs_Click { my $ret = Win32::GUI::GetSaveFileName( -title => "Save html File As", -filter => ["Html Document (*.htm, *.html)" => "*.htm;*.html"], -directory => $Directory, ); if ($ret) { $HtmlFile = $ret; $ret = $Control->SaveDocument ($HtmlFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveDocument ", "Save Error"); } } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetSaveFileName Error"); } } # Print sub FilePrint_Click { $ret = $Control->PrintDocument (1); } # Directory sub FileDirectory_Click { my $ret = Win32::GUI::BrowseForFolder ( -title => "Select default directory", -directory => $Directory, -folderonly => 1, ); $Directory = $ret if ($ret); } # Exit sub FileExit_Click { return Finish(); } ####################################################################### # # Edit Menu # ####################################################################### sub EditUndo_Click { $Control->Undo(); } sub EditRedo_Click { $Control->Redo(); } sub EditCut_Click { $Control->Cut(); } sub EditCopy_Click { $Control->Copy(); } sub EditPaste_Click { $Control->Paste(); } sub EditSelectAll_Click { $Control->SelectAll(); } sub EditDelete_Click { $Control->Delete(); } sub EditFind_Click { $Control->FindText(); } ####################################################################### # # Format Menu # ####################################################################### sub FormatBold_Click { $Control->Bold(); } sub FormatItalic_Click { $Control->Italic(); } sub FormatUnderline_Click { $Control->Underline(); } sub FormatFont_Click { $Control->Font(); } sub FormatJustifyLeft_Click { $Control->JustifyLeft(); } sub FormatJustifyCenter_Click { $Control->JustifyCenter(); } sub FormatJustifyRight_Click { $Control->JustifyRight(); } sub FormatIndent_Click { $Control->Indent(); } sub FormatOutdent_Click { $Control->Outdent(); } ####################################################################### # # Insert Menu # ####################################################################### sub InsertHyperLink_Click { $Control->HyperLink(); } sub InsertImage_Click { $Control->Image(); } sub InsertOrderList { $Control->OrderList(); } sub InsertUnOrderList { $Control->UnOrderList(); } sub InsertUnlink_Click { $Control->Unlink(); } ####################################################################### # # Help Menu # ####################################################################### sub HelpAbout_Click { Win32::GUI::MessageBox (0, "Perl Html Editor 0.1 by Laurent Rocher", "About",MB_ICONINFORMATION); } --- NEW FILE: InfoControl.pl --- # perl -w # # Information about a control. # Create a html file with control information. # Parametre : CLSID Or ProgID # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; if ($#ARGV != 0) { print $0, " : ControlId\n"; exit(0); } $ControlID = $ARGV[0]; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => $ControlID, ) or die "new Control"; open (F, ">$ControlID.html") or die "open"; # Enum Property info print F '<HTML><BODY><HR><H1>Properties</H1><HR>'; print "Properties\n"; foreach $id ($Control->EnumPropertyID()) { %property = $Control->GetPropertyInfo ($id); foreach $key (keys %property) { print F "<B>$key</B> = ", $property {$key}, "<BR>"; } print F "<P>"; } # Enum Method info print F "<P><HR><H1>Methods</H1><HR>"; print "Methods\n"; foreach $id ($Control->EnumMethodID()) { %method = $Control->GetMethodInfo ($id); foreach $key (keys %method) { print F "<B>$key</B> = ", $method {$key}, "<BR>"; } print F "<P>"; } # Enum Event info print F "<P><HR><H1>Events</H1><HR>"; print "Events\n"; foreach $id ($Control->EnumEventID()) { %event = $Control->GetEventInfo ($id); foreach $key (keys %event) { print F "<B>$key</B> = ", $event {$key}, "<BR>"; } print F "<P>"; } print F "</BODY></HTML>"; close (F); --- NEW FILE: MShtml.pl --- # perl -w # # MSHTML : Load static HTML data # # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>", ) or die "new Control"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: Info.bat --- rem Small Batch file for call InfoControl script rem DHTML edit rem perl infocontrol.pl {2D360200-FFF5-11D1-8D03-00A0C959BC0A} rem Webbrowser {8856F961-340A-11D0-A96B-00C04FD705A2} perl infocontrol.pl Explorer.Shell.2 rem FlexGrid rem perl infocontrol.pl {AFC78D00-B917-11CE-AAE4-CE6AC0F06E88} rem MsFlexGrid {6262D3A0-531B-11CF-91F6-C2863C385E30} rem perl infocontrol.pl MSFlexGridLib.MSFlexGrid rem SCGrid rem perl infocontrol.pl prjSCGrid.SCGrid rem Movie control information rem perl infocontrol.pl MOVIEPLAYER.MoviePlayerCtrl.1 --- NEW FILE: Google.pl --- # perl -w # # Hosting WebBrowser # - Create a WebBrowser control and get a Win32::OLe handler. # - Navigate on Google.fr # - When document loaded (DoucmentComplete event), set Win32::GUI::AxWindow in serach edit then submit # If Google Html page change, must change Item index. # use Cwd; use Win32::GUI; use Win32::OLE; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow and Win32::OLE", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow with a webbrowser $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 100], -size => [400, 300], -control => "Shell.Explorer.2", ) or die "new Control"; # Register Event $Control->RegisterEvent ("DocumentComplete", "DocumentComplete_Event" ); # Get Ole object $OLEControl = $Control->GetOLE(); # Navigate to google $Control->CallMethod("Navigate", 'http://www.google.fr/'); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Event handler sub DocumentComplete_Event { # print $OLEControl->{LocationUrl}, "\n"; return unless $OLEControl->{LocationUrl} eq 'http://www.google.fr/'; print "Search Win32::GUI::AXWindow\n"; my $all = $OLEControl->{Document}->{all}; # List all HTML TAG # for $i (0..$all->length) { # my $item = $all->item($i); # print "$i = ", $item->outerHTML , "\n\n"; # } # Input texte my $inputTexte = $all->item(49); $inputTexte->{value} = "Win32::GUI::AxWindow"; # Submit my $Submit = $all->item(55); $Submit->click; } # Main window event handler sub Window_Terminate { # Release all before destroy window undef $OLEControl; # $Control->Release(); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } |
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15455 Added Files: AxWindow.html AxWindow.pm AxWindow.xs Changes MANIFEST Makefile.PL README TYPEMAP Log Message: Added to repository --- NEW FILE: AxWindow.pm --- package Win32::GUI::AxWindow; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); use Win32::GUI; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader Win32::GUI::Window); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw(); $VERSION = '0.07'; bootstrap Win32::GUI::AxWindow $VERSION; # Preloaded methods go here. # Initialise Win32::GUI::AxWindow::_Initialise(); # DeInitialise END { Win32::GUI::AxWindow::_DeInitialise(); } # Autoload methods go after =cut, and are processed by the autosplit program. # # new : Create a new ActiveX Window # sub new { my $class = shift; my %in = @_; ### Control option croak("-parent undefined") unless exists $in{-parent}; croak("-name undefined") unless exists $in{-name}; croak("-control undefined") unless exists $in{-control}; my $parent = $in{-parent}; my $name = $in{-name}; my $clsid = $in{-control}; # print "Parent = $parent->{-name}\n"; # print "Name = $name\n"; # print "Control = $clsid\n"; ### Size my ($x, $y, $w, $h) = (0,0,1,1); $x = $in{-left} if exists $in{-left}; $y = $in{-top} if exists $in{-top}; $w = $in{-width} if exists $in{-width}; $h = $in{-height} if exists $in{-height}; ($x, $y) = ($in{-pos}[0] , $in{-pos}[1]) if exists $in{-pos}; ($w, $h) = ($in{-size}[0],$in{-size}[1]) if exists $in{-size}; # print "(x,y) = ($x,$y)\n(w,h) = ($w,$h)\n"; ### Window Style my $style = WS_CHILD | WS_CLIPCHILDREN; $style = $in{-style} if exists $in{-style}; $style |= $in{-pushstyle} if exists $in{-pushstyle}; $style ^= $in{-popstyle} if exists $in{-popstyle}; $style |= $in{-addstyle} if exists $in{-addstyle}; $style ^= $in{-remstyle} if exists $in{-remstyle}; $style |= WS_VISIBLE unless exists $in{-visible} && $in{-visible} == 0; $style |= WS_TABSTOP unless exists $in{-tabstop} && $in{-tabstop} == 0; $style |= WS_DISABLED if exists $in{-enable} && $in{-enable} == 0; $style |= WS_HSCROLL if exists $in{-hscroll} && $in{-hscroll} == 1; $style |= WS_VSCROLL if exists $in{-vscroll} && $in{-vscroll} == 1; # print "Style = $style\n"; ### Window ExStyle my $exstyle = 0; $exstyle = $in{-exstyle} if exists $in{-exstyle}; $exstyle |= $in{-pushexstyle} if exists $in{-pushexstyle}; $exstyle ^= $in{-popexstyle} if exists $in{-popexstyle}; $exstyle |= $in{-addexstyle} if exists $in{-addexstyle}; $exstyle ^= $in{-remexstyle} if exists $in{-remexstyle}; # print "ExStyle = $exstyle\n"; ### Create Window and ActiveX Object my $self = {}; bless $self, $class; if ( $self->_Create($parent, $clsid, $style, $exstyle, $x, $y, $w, $h) ) { ### Store Data (Win32::GUI glue) $self->{-name} = $in{-name}; $parent->{$name} = $self; return $self; } return undef; } # # CallMethod : Use Invoke with DISPATCH_METHOD # sub CallMethod { my $self = shift; return $self->Invoke (0x01, @_); } # # GetProperty : Use Invoke with DISPATCH_PROPERTYGET # sub GetProperty { my $self = shift; return $self->Invoke (0x02, @_); } # # PutProperty : Use Invoke with DISPATCH_PROPERTYPUT # sub SetProperty { my $self = shift; return $self->Invoke (0x04, @_); } 1; __END__ # Below is the stub of documentation for your module. You better edit it! =head1 NAME Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI =head1 SYNOPSIS use Win32::GUI; use Win32::GUI::AxWindow; # Main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -post => [100, 100], -size => [400, 400], ); # Add a WebBrowser AxtiveX $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -control => "Shell.Explorer.2", # -control => "{8856F961-340A-11D0-A96B-00C04FD705A2}", -pos => [0, 0], -size => [400, 400], ); # Register some event $Control->RegisterEvent("StatusTextChange", sub { $self = shift; $eventid = shift; print "Event : ", @_, "\n"; } ); # Call Method $Control->CallMethod("Navigate", 'http://www.perl.com/'); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } =head1 DESCRIPTION =head2 AxWindow =item C<new> (...) Create a new ActiveX window. options : -parent => parent window (Required) -name => window name (Required) -size => window size [ width, heigth ] -pos => window pos [ left, top ] -width => window width -height => window height -left => window left -top => window top -control => clisd (see below) (Required). clsid is a string identifier to create the control. Must be formatted in one of the following ways: - A ProgID such as "MSCAL.Calendar.7" - A CLSID such as "{8E27C92B-1264-101C-8A2F-040224009C02}" - A URL such as "http://www.microsoft.com" - A reference to an Active document such as 'file://Documents/MyDoc.doc' - A fragment of HTML such as "MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>" Note "MSHTML:" must precede the HTML fragment so that it is designated as being an MSHTML stream. styles: -visible => 0/1 -tabstop => 0/1 -hscroll => 0/1 -vscroll => 0/1 -style, -addstyle, -pushstyle, -remstyle, -popstyle -exstyle, -exaddstyle, -expushstyle, -exremstyle, -expopstyle Default style is : WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN =item C<Release> () If have crash when exiting, call this function before all the window are destroy (before Win32::GUI::Dialog(); exit). Generaly, call this function in the Window_Terminate handle. =head2 Property =item C<EnumPropertyID> () Return a list of all the Property ID of the control. =item C<EnumPropertyName> () Return a list of all the Property name of the control. =item C<GetPropertyInfo> (ID_or_Name) Return a hash with information about the Property from ID or Name. Hash entry : -Name => Property Name. -ID => Property ID. -VarType => Property Type (Variant type). -EnumValue => A formated string of enum value ( enum1=value1,enum2=value2,... ). -ReadOnly => Indicate if a property can only be read. -Description => Property Description. -Prototype => Prototype =item C<GetProperty> (ID_or_Name, [index, ...]) Get property value. For indexed property, add index list. =item C<SetProperty> (ID_or_Name, [index, ...], value) Set property value For indexed property, add index list before value. =head2 Method =item C<EnumMethodID> () Return a list of all the Method ID of the control. =item C<EnumMethodName> () Return a list of all the Method name of the control. =item C<GetMethodInfo> (ID_Name) Return a hash with information about the Method from ID or Name. Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype. =item C<CallMethod> (ID_or_Name, ...) Invoke a method of an ActiveX control. =head2 Event =item C<EnumEventID> () Return a list of all the Event ID of the control. =item C<EnumEventName> () Return a list of all the Event Name of the control. =item C<GetEventInfo> (ID_or_Name) Return a hash with information about the Event from ID or Name. Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype. =item C<RegisterEvent> (ID_or_Name, Callback) Associate a Callback for an ActiveX Event. =head2 Win32::OLE =item C<GetOLE> () Return a Win32::OLE object of Hosted ActiveX Control. You MUST add use Win32::OLE in your script. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage :http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut --- NEW FILE: Makefile.PL --- use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Win32::GUI::AxWindow', 'VERSION_FROM' => 'AxWindow.pm', # finds $VERSION 'XS' => { 'AxWindow.xs' => 'AxWindow.cpp' }, 'LIBS' => ['atl.lib'], # e.g., '-lm' 'INC' => '', # e.g., '-I/usr/include/other' ($] eq '5.00503') ? ( 'DEFINE' => '-DPERL_5005', # e.g., '-DHAVE_SOMETHING' ) : ( 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' ), ($] ge '5.005') ? ( 'AUTHOR' => 'ROCHER Laurent (ro...@cl...)', 'ABSTRACT' => 'Add ActiveX Control Hosting in Win32::GUI', ) : (), ); sub MY::xs_c { ' .xs.c: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c .xs.cpp: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp '; } --- NEW FILE: MANIFEST --- Makefile.PL Changes AxWindow.pm AxWindow.xs MANIFEST TYPEMAP Samples/WebBrowser.pl Samples/InfoControl.pl Samples/DHtmlEdit.pl Samples/DHtmlEdit.pm Samples/DHtmlEditor.pl Samples/MsFlexGrid.pl Samples/TestOLE.pl --- NEW FILE: AxWindow.xs --- /**********************************************************************/ /* C o n t a i n e r . x s */ /**********************************************************************/ #include <atlbase.h> CComModule _Module; #include <atlcom.h> #include <atlhost.h> #include <atlctl.h> #include <winbase.h> /*====================================================================*/ /* Perl Compatibility */ /*====================================================================*/ #ifdef PERL_5005 [...2660 lines suppressed...] void Release (container) CContainer* container CODE: // printf("Release\n"); container->Clean(); // printf("Release\n"); ################################################################## # # DESTROY # void DESTROY(container) CContainer* container CODE: // printf("DESTROY\n"); delete container; // printf("DESTROY\n"); --- NEW FILE: README --- Win32::GUI::AxWindow 0.07 ========================= Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI INSTALLATION To install this module type the following: perl Makefile.PL make make install DEPENDENCIES This module requires these other modules and libraries: Win32::GUI Active Template Library (ATL) WEB PAGE AND PPM REPOSITORY See: http://perso.club-internet.fr/rocherl/Win32GUI.html COPYRIGHT AND LICENCE Copyright 2003 by Laurent Rocher (lr...@cp...). This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html>. --- NEW FILE: Changes --- Revision history for Perl extension AxWindow. 0.07 03/02/2004 - Correct GetOLE() method when using PAR and PerlApp. 0.06 28/09/2003 - Rewrite creation method (Remove AttachControl method). - No more need to call Release Method before exit. - Correct bug in GetPropertyInfo with VARTYPE property. - Correct -heigth option. - Update and add samples. 0.05 15/10/2002 - Add GetOLE method (return a Win32::OLE object of Hosted ActiveX Control). - Add TestOle.pl Sample. 0.04 14/09/2002 - Add indexed property support. - Change code organisation (Invoke method, CProperty child of CMethod). - Add MSFlexGrid Sample. 0.03 30/05/2002 - Add VARTYPE property support. - Add output parameter for event support. - Accept control without event. - Correct DHTMLEdit.pm wrapper class. 0.02 25/03/2002 - Correct ReadOnly value for Properties. - Add =value for Enum string list for Properties. - Test ReadOnly attribut in SetProperty. - SetProperty handle Enum property by value or string constant. - Add a Release method for clean ActiveX reference before window destroy. - Manage VT_USERDEFINED as enum in CallMethod. - Add some documentation (sorry for my english ;-). - Add DHTML Edit sample (basic and a wrapper class). 0.01 22/03/2002 - original version; created by h2xs 1.19 - ActiveX control information (Properties, Metods, Events). - Set/Get property. - Call a Method. - Event Support. - Support of basic variant type. --- NEW FILE: TYPEMAP --- TYPEMAP CContainer* T_CONTAINER HWND T_HANDLE HMENU T_HANDLE HICON T_HANDLE HCURSOR T_HANDLE HBITMAP T_HANDLE HFONT T_HANDLE HGDIOBJ T_HANDLE HIMAGELIST T_HANDLE HDC T_HANDLE HBRUSH T_HANDLE HPEN T_HANDLE HTREEITEM T_IV LONG T_IV LPCTSTR T_PV LPTSTR T_PV DWORD T_IV UINT T_IV BOOL T_IV WPARAM T_IV LPARAM T_IV LRESULT T_IV HINSTANCE T_IV COLORREF T_COLOR LPCSTR T_PV HENHMETAFILE T_IV FLOAT T_FLOAT LPVOID T_PV HACCEL T_IV ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { if(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0) != NULL) $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0))); else $var = NULL; } else $var = ($type) SvIV($arg); T_COLOR $var = SvCOLORREF($arg); T_CONTAINER $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-CContainer\", 11, 0))); ################################################################################ OUTPUT T_HANDLE sv_setiv($arg, (IV) $var); T_COLOR sv_setiv($arg, (IV) $var); --- NEW FILE: AxWindow.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI</title> <link rev="made" href="mailto:" /> </head> <body style="background-color: white"> <p><a name="__index__"></a></p> <!-- INDEX BEGIN --> <ul> <li><a href="#name">NAME</a></li> <li><a href="#synopsis">SYNOPSIS</a></li> <li><a href="#description">DESCRIPTION</a></li> <ul> <li><a href="#axwindow">AxWindow</a></li> <li><a href="#property">Property</a></li> <li><a href="#method">Method</a></li> <li><a href="#event">Event</a></li> <li><a href="#win32::ole">Win32::OLE</a></li> </ul> <li><a href="#author">AUTHOR</a></li> <li><a href="#see_also">SEE ALSO</a></li> </ul> <!-- INDEX END --> <hr /> <p> </p> <h1><a name="name">NAME</a></h1> <p>Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI</p> <p> </p> <hr /> <h1><a name="synopsis">SYNOPSIS</a></h1> <pre> use Win32::GUI; use Win32::GUI::AxWindow;</pre> <pre> # Main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -post => [100, 100], -size => [400, 400], );</pre> <pre> # Add a WebBrowser AxtiveX $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -control => "Shell.Explorer.2", # -control => "{8856F961-340A-11D0-A96B-00C04FD705A2}", -pos => [0, 0], -size => [400, 400], );</pre> <pre> # Register some event $Control->RegisterEvent("StatusTextChange", sub { $self = shift; $eventid = shift; print "Event : ", @_, "\n"; } );</pre> <pre> # Call Method $Control->CallMethod("Navigate", '<a href="http://www.perl.com/">http://www.perl.com/</a>');</pre> <pre> # Event loop $Window->Show(); Win32::GUI::Dialog();</pre> <pre> # Main window event handler</pre> <pre> sub Window_Terminate {</pre> <pre> return -1; }</pre> <pre> sub Window_Resize {</pre> <pre> if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } }</pre> <p> </p> <hr /> <h1><a name="description">DESCRIPTION</a></h1> <p> </p> <h2><a name="axwindow">AxWindow</a></h2> <dl> <dt><strong><a name="item_new"><code>new</code> (...)</a></strong><br /> </dt> <dd> <pre> Create a new ActiveX window.</pre> </dd> <dd> <pre> options :</pre> </dd> <dd> <pre> -parent => parent window (Required) -name => window name (Required) -size => window size [ width, heigth ] -pos => window pos [ left, top ] -width => window width -height => window height -left => window left -top => window top -control => clisd (see below) (Required).</pre> </dd> <dd> <pre> clsid is a string identifier to create the control. Must be formatted in one of the following ways:</pre> </dd> <dd> <pre> - A ProgID such as "MSCAL.Calendar.7" - A CLSID such as "{8E27C92B-1264-101C-8A2F-040224009C02}" - A URL such as "<a href="http://www.microsoft.com"">http://www.microsoft.com"</a>; - A reference to an Active document such as '<a href="file://Documents/MyDoc.doc">file://Documents/MyDoc.doc</a>' - A fragment of HTML such as "MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>" Note "MSHTML:" must precede the HTML fragment so that it is designated as being an MSHTML stream.</pre> </dd> <dd> <pre> styles:</pre> </dd> <dd> <pre> -visible => 0/1 -tabstop => 0/1 -hscroll => 0/1 -vscroll => 0/1</pre> </dd> <dd> <pre> -style, -addstyle, -pushstyle, -remstyle, -popstyle -exstyle, -exaddstyle, -expushstyle, -exremstyle, -expopstyle</pre> </dd> <dd> <pre> Default style is : WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN</pre> </dd> <dt><strong><a name="item_release"><code>Release</code> ()</a></strong><br /> </dt> <dd> <pre> If have crash when exiting, call this function before all the window are destroy (before Win32::GUI::Dialog(); exit). Generaly, call this function in the Window_Terminate handle.</pre> </dd> </dl> <p> </p> <h2><a name="property">Property</a></h2> <dl> <dt><strong><a name="item_enumpropertyid"><code>EnumPropertyID</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Property ID of the control.</pre> </dd> <dt><strong><a name="item_enumpropertyname"><code>EnumPropertyName</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Property name of the control.</pre> </dd> <dt><strong><a name="item_getpropertyinfo"><code>GetPropertyInfo</code> (ID_or_Name)</a></strong><br /> </dt> <dd> <pre> Return a hash with information about the Property from ID or Name.</pre> </dd> <dd> <pre> Hash entry : -Name => Property Name. -ID => Property ID. -VarType => Property Type (Variant type). -EnumValue => A formated string of enum value ( enum1=value1,enum2=value2,... ). -ReadOnly => Indicate if a property can only be read. -Description => Property Description. -Prototype => Prototype</pre> </dd> <dt><strong><a name="item_getproperty"><code>GetProperty</code> (ID_or_Name, [index, ...])</a></strong><br /> </dt> <dd> <pre> Get property value. For indexed property, add index list.</pre> </dd> <dt><strong><a name="item_setproperty"><code>SetProperty</code> (ID_or_Name, [index, ...], value)</a></strong><br /> </dt> <dd> <pre> Set property value For indexed property, add index list before value.</pre> </dd> </dl> <p> </p> <h2><a name="method">Method</a></h2> <dl> <dt><strong><a name="item_enummethodid"><code>EnumMethodID</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Method ID of the control.</pre> </dd> <dt><strong><a name="item_enummethodname"><code>EnumMethodName</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Method name of the control.</pre> </dd> <dt><strong><a name="item_getmethodinfo"><code>GetMethodInfo</code> (ID_Name)</a></strong><br /> </dt> <dd> <pre> Return a hash with information about the Method from ID or Name.</pre> </dd> <dd> <pre> Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype.</pre> </dd> <dt><strong><a name="item_callmethod"><code>CallMethod</code> (ID_or_Name, ...)</a></strong><br /> </dt> <dd> <pre> Invoke a method of an ActiveX control.</pre> </dd> </dl> <p> </p> <h2><a name="event">Event</a></h2> <dl> <dt><strong><a name="item_enumeventid"><code>EnumEventID</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Event ID of the control.</pre> </dd> <dt><strong><a name="item_enumeventname"><code>EnumEventName</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Event Name of the control.</pre> </dd> <dt><strong><a name="item_geteventinfo"><code>GetEventInfo</code> (ID_or_Name)</a></strong><br /> </dt> <dd> <pre> Return a hash with information about the Event from ID or Name.</pre> </dd> <dd> <pre> Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype.</pre> </dd> <dt><strong><a name="item_registerevent"><code>RegisterEvent</code> (ID_or_Name, Callback)</a></strong><br /> </dt> <dd> <pre> Associate a Callback for an ActiveX Event.</pre> </dd> </dl> <p> </p> <h2><a name="win32::ole">Win32::OLE</a></h2> <dl> <dt><strong><a name="item_getole"><code>GetOLE</code> ()</a></strong><br /> </dt> <dd> <pre> Return a Win32::OLE object of Hosted ActiveX Control.</pre> </dd> <dd> <pre> You MUST add use Win32::OLE in your script.</pre> </dd> </dl> <p> </p> <hr /> <h1><a name="author">AUTHOR</a></h1> <pre> Laurent Rocher (lr...@cp...) HomePage :<a href="http://perso.club-internet.fr/rocherl/Win32GUI.html">http://perso.club-internet.fr/rocherl/Win32GUI.html</a></pre> <p> </p> <hr /> <h1><a name="see_also">SEE ALSO</a></h1> <pre> Win32::GUI</pre> </body> </html> |
From: jw <jw...@us...> - 2005-11-01 12:32:37
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples/UnComplete In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15455/Samples/UnComplete Added Files: MsFlexGrid.pm Log Message: Added to repository --- NEW FILE: MsFlexGrid.pm --- # # Win32::GUI::MsFlexGrid: wrapper package for MsFlexGrid ActiveX # by Laurent Rocher. # # use strict; use vars qw(@ISA $VERSION); use Carp 'croak','carp'; use Win32::GUI::AxWindow; @ISA = qw(Win32::GUI::AxWindow Exporter); $VERSION = "1.0"; BEGIN { use Exporter(); use vars qw(@EXPORT); [...1680 lines suppressed...] # VARIANT_BOOL RightToLeft() / void RightToLeft([in] VARIANT_BOOL rhs) # Determines text display direction and control visual appearance on a bidirectional system. sub RightToLeft { croak("Usage: VARIANT_BOOL RightToLeft() / void RightToLeft([in] VARIANT_BOOL rhs)") if (@_ != 1 && @_ != 2); my ($self, $value) = @_; if (defined $value) { return $self->SUPER::SetProperty (0xfffffd9d, $value); } else { return $self->SUPER::GetProperty (0xfffffd9d); } } 1; __END__ |
From: jw <jw...@us...> - 2005-11-01 12:31:30
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples/UnComplete In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15339/UnComplete Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples/UnComplete added to the repository |
From: jw <jw...@us...> - 2005-11-01 12:31:22
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15316/Samples Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples added to the repository |
From: jw <jw...@us...> - 2005-11-01 10:37:01
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Scintilla In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23874 Added Files: Changes MANIFEST Makefile.PL Perl.pm README Scintilla.html Scintilla.pm Scintilla.pm.begin Scintilla.pm.end Scintilla.xs Typemap Log Message: Added to repository --- NEW FILE: Makefile.PL --- use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Win32::GUI::Scintilla', 'VERSION_FROM' => 'Scintilla.pm.begin', # finds $VERSION 'PREREQ_PM' => {}, # e.g., Module::Name => 1.1 'PM' => { 'Scintilla.pm' => '$(INST_LIBDIR)/Scintilla.pm', 'Perl.pm' => '$(INST_LIBDIR)/Scintilla/Perl.pm', }, ($] >= 5.005 ? ## Add these new keywords supported since 5.005 (ABSTRACT => 'Add Scintilla control to Win32::GUI', AUTHOR => 'ROCHER Laurent (lr...@cp...)') : ()), 'LIBS' => [''], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' # Insert -I. if you add *.h files later: 'INC' => '', # e.g., '-I/usr/include/other' # Un-comment this if you add C files to link with later: # 'OBJECT' => '$(O_FILES)', # link all the C files too ); sub MY::postamble { return <<'MAKE_FRAG'; Scintilla.pm : Scintilla.pm.begin Scintilla.pm.end include/Scintilla.iface include/autogen.pl $(PERL) ./include/autogen.pl config :: $(INST_ARCHAUTODIR)/SciLexer.dll @$(NOOP) $(INST_ARCHAUTODIR)/SciLexer.dll : include/SciLexer.dll $(CP) ./include/SciLexer.dll $(INST_ARCHAUTODIR)/SciLexer.dll MAKE_FRAG } --- NEW FILE: Scintilla.pm.begin --- #------------------------------------------------------------------------ # Scintilla control for Win32::GUI # by Laurent ROCHER (lr...@cp...) #------------------------------------------------------------------------ #perl2exe_bundle 'SciLexer.dll' package Win32::GUI::Scintilla; use vars qw($ABSTRACT $VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Win32::GUI; use Config; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader Win32::GUI::Window); $VERSION = '1.7'; bootstrap Win32::GUI::Scintilla $VERSION; #------------------------------------------------------------------------ # Load Scintilla DLL from perl directory or standard LoadLibrary search my $SCILEXER_PATH = $Config{'installsitelib'} . '\auto\Win32\GUI\Scintilla\SciLexer.DLL'; my $SCINTILLA_DLL = Win32::GUI::LoadLibrary($SCILEXER_PATH) || Win32::GUI::LoadLibrary('SciLexer.DLL'); Win32::GUI::Scintilla::_Initialise(); END { # Free Scintilla DLL Win32::GUI::FreeLibrary($SCINTILLA_DLL); Win32::GUI::Scintilla::_UnInitialise(); } #------------------------------------------------------------------------ # # Notify event code # use constant SCN_STYLENEEDED => 2000; use constant SCN_CHARADDED => 2001; use constant SCN_SAVEPOINTREACHED => 2002; use constant SCN_SAVEPOINTLEFT => 2003; use constant SCN_MODIFYATTEMPTRO => 2004; use constant SCN_KEY => 2005; use constant SCN_DOUBLECLICK => 2006; use constant SCN_UPDATEUI => 2007; use constant SCN_MODIFIED => 2008; use constant SCN_MACRORECORD => 2009; use constant SCN_MARGINCLICK => 2010; use constant SCN_NEEDSHOWN => 2011; use constant SCN_PAINTED => 2013; use constant SCN_USERLISTSELECTION => 2014; use constant SCN_URIDROPPED => 2015; use constant SCN_DWELLSTART => 2016; use constant SCN_DWELLEND => 2017; use constant SCN_ZOOM => 2018; use constant SCN_HOTSPOTCLICK => 2019; use constant SCN_HOTSPOTDOUBLECLICK => 2020; use constant SCN_CALLTIPCLICK => 2021; #------------------------------------------------------------------------ # # New scintilla control # sub new { my $class = shift; my (%in) = @_; my %out; ### Filtering option for my $option qw( -name -parent -left -top -width -height -pos -size -pushstyle -addstyle -popstyle -remstyle -notstyle -negstyle -exstyle -pushexstyle -addexstyle -popexstyle -remexstyle -notexstyle ) { $out{$option} = $in{$option} if exists $in{$option}; } ### Default window my $constant = Win32::GUI::constant("WIN32__GUI__STATIC", 0); $out{-style} = WS_CLIPCHILDREN; $out{-class} = "Scintilla"; ### Window style $out{-style} |= WS_TABSTOP unless exists $in{-tabstop} && $in{-tabstop} == 0; #Default to -tabstop => 1 $out{-style} |= WS_VISIBLE unless exists $in{-visible} && $in{-visible} == 0; #Default to -visible => 1 $out{-style} |= WS_HSCROLL if exists $in{-hscroll} && $in{-hscroll} == 1; $out{-style} |= WS_VSCROLL if exists $in{-vscroll} && $in{-vscroll} == 1; my $self = Win32::GUI->_new($constant, $class, %out); if (defined ($self)) { # Option Text : $self->SetText($in{-text}) if exists $in{-text}; $self->SetReadOnly($in{-readonly}) if exists $in{-readonly}; } return $self; } # # Win32 shortcut # sub Win32::GUI::Window::AddScintilla { my $parent = shift; return Win32::GUI::Scintilla->new (-parent => $parent, @_); } #------------------------------------------------------------------------ # Miscolous function #------------------------------------------------------------------------ # # Clear Scintilla Text # sub NewFile { my $self = shift; $self->ClearAll(); $self->EmptyUndoBuffer(); $self->SetSavePoint(); } # # Load text file to Scintilla # sub LoadFile { my ($self, $file) = @_; $self->ClearAll(); $self->Cancel(); $self->SetUndoCollection(0); open F, "<$file" or return 0; while ( <F> ) { $self->AppendText($_); } close F; $self->SetUndoCollection(1); $self->EmptyUndoBuffer(); $self->SetSavePoint(); $self->GotoPos(0); return 1; } # # Save Scintilla text to file # sub SaveFile { my ($self, $file) = @_; open F, ">$file" or return 0; for my $i (0..$self->GetLineCount()) { print F $self->GetLine ($i); } close F; $self->SetSavePoint(); return 1; } # # Help routine for StyleSet # sub StyleSetSpec { my ($self, $style, $textstyle) = @_; foreach my $prop (split (/,/, $textstyle)) { my ($key, $value) = split (/:/, $prop); $self->StyleSetFore($style, $value) if $key eq 'fore'; $self->StyleSetBack($style, $value) if $key eq 'back'; $self->StyleSetFont($style, $value) if $key eq 'face'; $self->StyleSetSize($style, int ($value) ) if $key eq 'size'; $self->StyleSetBold($style, 1) if $key eq 'bold'; $self->StyleSetBold($style, 0) if $key eq 'notbold'; $self->StyleSetItalic($style, 1) if $key eq 'italic'; $self->StyleSetItalic($style, 0) if $key eq 'notitalic'; $self->StyleSetUnderline($style, 1) if $key eq 'underline'; $self->StyleSetUnderline($style, 0) if $key eq 'notunderline'; $self->StyleSetEOLFilled ($style, 1) if $key eq 'eolfilled'; $self->StyleSetEOLFilled ($style, 0) if $key eq 'noteolfilled'; } } #------------------------------------------------------------------------ # Begin Autogenerate #------------------------------------------------------------------------ --- NEW FILE: Scintilla.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Win32::GUI::Scintilla - Add Scintilla edit control to Win32::GUI</title> <link rev="made" href="mailto:" /> </head> <body style="background-color: white"> <p><a name="__index__"></a></p> <!-- INDEX BEGIN --> <ul> <li><a href="#name">NAME</a></li> <li><a href="#synopsis">SYNOPSIS</a></li> <li><a href="#description">DESCRIPTION</a></li> <ul> [...3150 lines suppressed...] See comment for relation between Lexer language and lexer constante.</pre> </dd> </dl> <p> </p> <hr /> <h1><a name="author">AUTHOR</a></h1> <pre> Laurent Rocher (lr...@cp...) HomePage :<a href="http://perso.club-internet.fr/rocherl/Win32GUI.html">http://perso.club-internet.fr/rocherl/Win32GUI.html</a></pre> <p> </p> <hr /> <h1><a name="see_also">SEE ALSO</a></h1> <pre> Win32::GUI</pre> </body> </html> --- NEW FILE: Perl.pm --- =head1 NAME Win32::GUI::Scintilla::Perl -- Scintilla control with Perl awareness. =head1 SYNOPSIS use Win32::GUI::Scintilla::Perl; my $win = #Create window here my $sciViewer = $winMain->AddScintillaPerl ( -name => "sciViewer", -left => 0, -top => 30, -width => 400, -height => 240, -addexstyle => WS_EX_CLIENTEDGE, ); #Change look and feel to your liking here. =cut package Win32::GUI::Scintilla::Perl; use strict; use Win32::GUI::Scintilla; =head1 METHODS =head2 new(%hOption) Create a Win32::GUI::Scintilla control which is in "Perl mode". Other than this, it's a regular Scintilla object. You can override any setting afterward. =cut my %hFontFace = ( 'times' => 'Times New Roman', 'mono' => 'Courier New', 'helv' => 'Lucida Console', 'lucida' => 'Lucida Console', 'other' => 'Comic Sans MS', 'size' => '10', 'size2' => '9', 'backcol'=> '#FFFFFF', ); my $keywordPerl = q{ NULL __FILE__ __LINE__ __PACKAGE__ __DATA__ __END__ AUTOLOAD BEGIN CORE DESTROY END EQ GE GT INIT LE LT NE CHECK abs accept alarm and atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot close closedir cmp connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eq eval exec exists exit exp fcntl fileno flock for foreach fork format formline ge getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst le length link listen local localtime lock log lstat lt m map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q qq qr quotemeta qu qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir s scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn while write x xor y }; sub new { my $pkg = shift; $pkg = ref($pkg) || $pkg; my $sci = Win32::GUI::Scintilla->new(@_) or return(undef); SetupPerl($sci) or return(undef); return($sci); } =head1 ROUTINES =head2 SetupPerl($sciControl) Setup $sciControl in Perl mode. Return 1 on success, else 0. =cut sub SetupPerl { my ($sci) = @_; # Set Perl Lexer $sci->SetLexer(Win32::GUI::Scintilla::SCLEX_PERL); # Set Perl Keyword $sci->SetKeyWords(0, $keywordPerl); # Folder ???? $sci->SetProperty("fold", "1"); $sci->SetProperty("tab.timmy.whinge.level", "1"); # Indenetation $sci->SetIndentationGuides(1); $sci->SetUseTabs(1); $sci->SetTabWidth(4); $sci->SetIndent(4); # Edge Mode $sci->SetEdgeMode(Win32::GUI::Scintilla::EDGE_LINE); #Win32::GUI::Scintilla::EDGE_BACKGROUND $sci->SetEdgeColumn(80); # Define margin # $sci->SetMargins(0,0); $sci->SetMarginTypeN(1, Win32::GUI::Scintilla::SC_MARGIN_NUMBER); $sci->SetMarginWidthN(1, 25); $sci->SetMarginTypeN(2, Win32::GUI::Scintilla::SC_MARGIN_SYMBOL); $sci->SetMarginMaskN(2, Win32::GUI::Scintilla::SC_MASK_FOLDERS); $sci->SetMarginSensitiveN(2, 1); $sci->SetMarginWidthN(2, 12); # Define marker $sci->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEREND, Win32::GUI::Scintilla::SC_MARK_BOXPLUSCONNECTED); $sci->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEREND, '#FFFFFF'); $sci->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEREND, '#000000'); $sci->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPENMID, Win32::GUI::Scintilla::SC_MARK_BOXMINUSCONNECTED); $sci->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPENMID, '#FFFFFF'); $sci->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPENMID, '#000000'); $sci->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERMIDTAIL, Win32::GUI::Scintilla::SC_MARK_TCORNER); $sci->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERMIDTAIL, '#FFFFFF'); $sci->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERMIDTAIL, '#000000'); $sci->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERTAIL, Win32::GUI::Scintilla::SC_MARK_LCORNER); $sci->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERTAIL, '#FFFFFF'); $sci->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERTAIL, '#000000'); $sci->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERSUB, Win32::GUI::Scintilla::SC_MARK_VLINE); $sci->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERSUB, '#FFFFFF'); $sci->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERSUB, '#000000'); $sci->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDER, Win32::GUI::Scintilla::SC_MARK_BOXPLUS); $sci->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDER, '#FFFFFF'); $sci->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDER, '#000000'); $sci->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPEN, Win32::GUI::Scintilla::SC_MARK_BOXMINUS); $sci->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPEN, '#FFFFFF'); $sci->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPEN, '#000000'); # Define Style $sci->StyleClearAll(); # Global default styles for all languages $sci->StyleSetSpec(Win32::GUI::Scintilla::STYLE_DEFAULT, "face:$hFontFace{'mono'},size:$hFontFace{'size'}"); $sci->StyleSetSpec(Win32::GUI::Scintilla::STYLE_LINENUMBER, "back:#C0C0C0,face:$hFontFace{mono}"); $sci->StyleSetSpec(Win32::GUI::Scintilla::STYLE_CONTROLCHAR, "face:$hFontFace{mono}"); $sci->StyleSetSpec(Win32::GUI::Scintilla::STYLE_BRACELIGHT, "fore:#FFFFFF,back:#0000FF,bold"); $sci->StyleSetSpec(Win32::GUI::Scintilla::STYLE_BRACEBAD, "fore:#000000,back:#FF0000,bold"); # White space $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_DEFAULT, "fore:#808080,face:$hFontFace{'mono'}"); # Error $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_ERROR , "fore:#0000FF"); # Comment $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_COMMENTLINE, "fore:#007F00"); # POD: = at beginning of line $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_POD, "fore:#004000,back:#E0FFE0,eolfilled"); # Number $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_NUMBER, "fore:#007F7F"); # Keyword $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_WORD , "fore:#00007F,bold"); # Double quoted string $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING, "fore:#7F007F,face:$hFontFace{'mono'},italic"); # Single quoted string $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_CHARACTER, "fore:#7F0000,face:$hFontFace{'mono'},italic"); # Symbols / Punctuation. Currently not used by LexPerl. $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_PUNCTUATION, "fore:#00007F,bold"); # Preprocessor. Currently not used by LexPerl. $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_PREPROCESSOR, "fore:#00007F,bold"); # Operators $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_OPERATOR , "bold"); # Identifiers (functions, etc.) $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_IDENTIFIER , "fore:#000000"); # Scalars: $var $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_SCALAR, "fore:#000000,back:#FFE0E0"); # Array: @var $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_ARRAY, "fore:#000000,back:#FFFFE0"); # Hash: %var $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HASH, "fore:#000000,back:#FFE0FF"); # Symbol table: *var $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_SYMBOLTABLE, "fore:#000000,back:#E0E0E0"); # Regex: /re/ or m{re} $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_REGEX, "fore:#000000,back:#A0FFA0"); # Substitution: s/re/ore/ $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_REGSUBST, "fore:#000000,back:#F0E080"); # Long Quote (qq, qr, qw, qx) -- obsolete: replaced by qq, qx, qr, qw $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_LONGQUOTE, "fore:#FFFF00,back:#8080A0"); # Back Ticks $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_BACKTICKS, "fore:#FFFF00,back:#A08080"); # Data Section: __DATA__ or __END__ at beginning of line $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_DATASECTION, "#600000,back:#FFF0D8,eolfilled"); # Here-doc (delimiter) $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_DELIM, "fore:#000000,back:#DDD0DD"); # Here-doc (single quoted, q) $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_Q, "fore:#7F007F,back:#DDD0DD,eolfilled,notbold"); # Here-doc (double quoted, qq) $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_QQ, "fore:#7F007F,back:#DDD0DD,eolfilled,bold"); # Here-doc (back ticks, qx) $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_QX, "fore:#7F007F,back:#DDD0DD,eolfilled,italics"); # Single quoted string, generic $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_Q, "fore:#7F007F,notbold"); # qq = Double quoted string $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QQ, "fore:#7F007F,italic"); # qx = Back ticks $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QX, "fore:#FFFF00,back:#A08080"); # qr = Regex $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QR, "fore:#000000,back:#A0FFA0"); # qw = Array $sci->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QW, "fore:#000000,back:#FFFFE0"); return(1); } =head1 Win32::GUI::Window methods =head2 AddScintillaPerl Create and add a Win32::GUI::Scintilla::Perl control to this window. =cut sub Win32::GUI::Window::AddScintillaPerl { my $parent = shift; return Win32::GUI::Scintilla::Perl->new (-parent => $parent, @_); } 1; =head1 AUTHOR Laurent Rocher (the hard work) and Johan Lindström (subclassing). Same license as Perl. =cut __END__ --- NEW FILE: README --- Win32::GUI::Scintilla version 1.7 ================================= Win32::GUI::Scintilla - Add Scintilla edit control to Win32::GUI INSTALLATION To install this module type the following: perl Makefile.PL make make install Makefile.pl notes: - Scintilla.pm is create by /include/autogen.pl by Makefile.PL. it use Scintilla.iface, Scintilla.pm.begin and Scintilla.pm.end. - Makefile.pl copy ./include/SciLexer.dll to .\blib\arch\auto\Win32\GUI\Scintilla\SciLexer.dll DEPENDENCIES This module requires these other modules and libraries: Win32::GUI Scintilla (http:/www.scintilla.org/) WEB PAGE AND PPM REPOSITORY See: http://perso.club-internet.fr/rocherl/Win32GUI.html COPYRIGHT AND LICENCE Copyright 2003 by Laurent Rocher (lr...@cp...). This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html>. --- NEW FILE: Scintilla.pm --- #------------------------------------------------------------------------ # Scintilla control for Win32::GUI # by Laurent ROCHER (lr...@cp...) #------------------------------------------------------------------------ #perl2exe_bundle 'SciLexer.dll' package Win32::GUI::Scintilla; use vars qw($ABSTRACT $VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Win32::GUI; use Config; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader Win32::GUI::Window); $VERSION = '1.7'; [...5864 lines suppressed...] =item C<Lexer constant> See Scintilla.pm SCLEX_* contante for lexer language. SCE_* for lexer constante. See comment for relation between Lexer language and lexer constante. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage :http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut --- NEW FILE: Scintilla.xs --- /**********************************************************************/ /* S c i n t i l l a . x s */ /**********************************************************************/ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include <windows.h> #include "./include/Scintilla.h" /*====================================================================*/ /* W I N 3 2 : : G U I */ /*====================================================================*/ #define MAX_WINDOW_NAME 128 /* * Various definitions to accomodate the different Perl versions around */ #ifdef PERL_OBJECT # ifdef _INC_WIN32_PERL5 # pragma message( "\n*** Using the 5.005 Perl Object CPerlObj class.\n" ) # define NOTXSPROC CPerlObj *pPerl, # define NOTXSCALL pPerl, # define CPerl CPerlObj # else // not _INC_WIN32_PERL5 # pragma message( "\n*** Using the 5.004 Perl Object CPerl class.\n" ) # define NOTXSPROC CPerl *pPerl, # define NOTXSCALL pPerl, # endif // _INC_WIN32_PERL5 #else # pragma message( "\n*** Using a non-Object Core Perl.\n" ) # define NOTXSPROC # define NOTXSCALL #endif /* * what we'll store in GWL_USERDATA */ typedef struct tagPERLWIN32GUI_USERDATA { DWORD dwSize; // struct size (our signature) #ifdef PERL_OBJECT CPerl *pPerl; // a pointer to the Perl Object #endif SV* svSelf; // a pointer to ourself char szWindowName[MAX_WINDOW_NAME]; // our -name BOOL fDialogUI; // are we to intercept dialog messages? int iClass; // our (Perl) class HACCEL hAcc; // our accelerator table HWND hTooltip; HCURSOR hCursor; DWORD dwPlStyle; int iMinWidth; int iMaxWidth; int iMinHeight; int iMaxHeight; COLORREF clrForeground; COLORREF clrBackground; HBRUSH hBackgroundBrush; WNDPROC wndprocPreContainer; WNDPROC wndprocPreNEM; int iEventModel; HV* hvEvents; DWORD dwEventMask; HWND Modal; } PERLWIN32GUI_USERDATA, *LPPERLWIN32GUI_USERDATA; BOOL ProcessEventError(NOTXSPROC char *Name, int* PerlResult) { if(strncmp(Name, "main::", 6) == 0) Name += 6; if(SvTRUE(ERRSV)) { MessageBeep(MB_ICONASTERISK); *PerlResult = MessageBox( NULL, SvPV_nolen(ERRSV), Name, MB_ICONERROR | MB_OKCANCEL ); if(*PerlResult == IDCANCEL) { *PerlResult = -1; } return TRUE; } else { return FALSE; } } /*====================================================================*/ /* H O O K F U N C T I O N */ /*====================================================================*/ typedef struct SCNotification * pSCNotification; /* struct SCNotification { struct NotifyHeader nmhdr; int position; // SCN_STYLENEEDED, SCN_MODIFIED, SCN_DWELLSTART, SCN_DWELLEND int ch; // SCN_CHARADDED, SCN_KEY int modifiers; // SCN_KEY int modificationType; // SCN_MODIFIED const char *text; // SCN_MODIFIED int length; // SCN_MODIFIED int linesAdded; // SCN_MODIFIED int message; // SCN_MACRORECORD uptr_t wParam; // SCN_MACRORECORD sptr_t lParam; // SCN_MACRORECORD int line; // SCN_MODIFIED int foldLevelNow; // SCN_MODIFIED int foldLevelPrev; // SCN_MODIFIED int margin; // SCN_MARGINCLICK int listType; // SCN_USERLISTSELECTION int x; // SCN_DWELLSTART, SCN_DWELLEND int y; // SCN_DWELLSTART, SCN_DWELLEND }; */ int DoEvent (NOTXSPROC char *Name, UINT code, pSCNotification evt) { int PerlResult; int count; PerlResult = 1; if(perl_get_cv(Name, FALSE) != NULL) { dSP; dTARG; ENTER; SAVETMPS; PUSHMARK(SP); XPUSHs(sv_2mortal(newSVpv("-code", 0))); XPUSHs(sv_2mortal(newSViv(code))); if (code == SCN_STYLENEEDED || code == SCN_MODIFIED || code == SCN_DWELLSTART || code == SCN_DWELLEND || code == SCN_MARGINCLICK || code == SCN_HOTSPOTCLICK || code == SCN_HOTSPOTDOUBLECLICK || code == SCN_CALLTIPCLICK) { XPUSHs(sv_2mortal(newSVpv("-position", 0))); XPUSHs(sv_2mortal(newSViv(evt->position))); } if (code == SCN_CHARADDED || code == SCN_KEY) { XPUSHs(sv_2mortal(newSVpv("-ch", 0))); XPUSHs(sv_2mortal(newSViv(evt->ch))); } if (code == SCN_KEY || code == SCN_MARGINCLICK || code == SCN_HOTSPOTCLICK || code == SCN_HOTSPOTDOUBLECLICK) { XPUSHs(sv_2mortal(newSVpv("-modifiers", 0))); XPUSHs(sv_2mortal(newSViv(evt->modifiers))); XPUSHs(sv_2mortal(newSVpv("-shift", 0))); XPUSHs(sv_2mortal(newSViv(evt->modifiers & SCMOD_SHIFT))); XPUSHs(sv_2mortal(newSVpv("-control", 0))); XPUSHs(sv_2mortal(newSViv(evt->modifiers & SCMOD_CTRL))); XPUSHs(sv_2mortal(newSVpv("-alt", 0))); XPUSHs(sv_2mortal(newSViv(evt->modifiers & SCMOD_ALT))); } if (code == SCN_MODIFIED ) { XPUSHs(sv_2mortal(newSVpv("-modificationType", 0))); XPUSHs(sv_2mortal(newSViv(evt->modificationType))); // XPUSHs(sv_2mortal(newSVpv("-text", 0))); // XPUSHs(sv_2mortal(newSVpv(evt->text, 0))); XPUSHs(sv_2mortal(newSVpv("-length", 0))); XPUSHs(sv_2mortal(newSViv(evt->length))); XPUSHs(sv_2mortal(newSVpv("-linesAdded", 0))); XPUSHs(sv_2mortal(newSViv(evt->linesAdded))); XPUSHs(sv_2mortal(newSVpv("-line", 0))); XPUSHs(sv_2mortal(newSViv(evt->line))); XPUSHs(sv_2mortal(newSVpv("-foldLevelNow", 0))); XPUSHs(sv_2mortal(newSViv(evt->foldLevelNow))); XPUSHs(sv_2mortal(newSVpv("-foldLevelPrev", 0))); XPUSHs(sv_2mortal(newSViv(evt->foldLevelPrev))); } if (code == SCN_MACRORECORD) { XPUSHs(sv_2mortal(newSVpv("-message", 0))); XPUSHs(sv_2mortal(newSViv(evt->message))); } if (code == SCN_MARGINCLICK) { XPUSHs(sv_2mortal(newSVpv("-margin", 0))); XPUSHs(sv_2mortal(newSViv(evt->margin))); } if (code == SCN_USERLISTSELECTION) { XPUSHs(sv_2mortal(newSVpv("-listType", 0))); XPUSHs(sv_2mortal(newSViv((int) evt->wParam))); // ??? // XPUSHs(sv_2mortal(newSViv(evt->listType))); // XPUSHs(sv_2mortal(newSVpv("-text", 0))); // XPUSHs(sv_2mortal(newSVpv(evt->text, 0))); } if (code == SCN_DWELLSTART || code == SCN_DWELLEND) { XPUSHs(sv_2mortal(newSVpv("-x", 0))); XPUSHs(sv_2mortal(newSViv(evt->x))); XPUSHs(sv_2mortal(newSVpv("-y", 0))); XPUSHs(sv_2mortal(newSViv(evt->y))); } PUTBACK; count = perl_call_pv(Name, G_EVAL|G_ARRAY); SPAGAIN; if(!ProcessEventError(NOTXSCALL Name, &PerlResult)) { if(count > 0) PerlResult = POPi; } PUTBACK; FREETMPS; LEAVE; } return PerlResult; } int DoEvent_Generic(NOTXSPROC char *Name) { int PerlResult; int count; PerlResult = 1; if(perl_get_cv(Name, FALSE) != NULL) { dSP; dTARG; ENTER; SAVETMPS; PUSHMARK(SP); PUTBACK; count = perl_call_pv(Name, G_EVAL|G_NOARGS); SPAGAIN; if(!ProcessEventError(NOTXSCALL Name, &PerlResult)) { if(count > 0) PerlResult = POPi; } PUTBACK; FREETMPS; LEAVE; } return PerlResult; } HHOOK hhook; LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) { CWPSTRUCT * msg = (CWPSTRUCT *) lParam; if (nCode >= 0 && msg->message == WM_NOTIFY) { NMHDR *lpnmhdr = (LPNMHDR) msg->lParam; char Name [255]; // Read Sender Class GetClassName (lpnmhdr->hwndFrom, Name, 255); if (memcmp (Name, "Scintilla", 9) == 0) { // Perl contexte #ifdef PERL_OBJECT CPerl *pPerl; #endif LPPERLWIN32GUI_USERDATA perlud = (LPPERLWIN32GUI_USERDATA) GetWindowLong(lpnmhdr->hwndFrom, GWL_USERDATA); if (perlud != NULL) { #ifdef PERL_OBJECT pPerl = perlud->pPerl; #endif // Build name strcpy(Name, "main::"); strcat(Name, (char *) perlud->szWindowName); strcat(Name, "_Notify"); DoEvent(NOTXSCALL Name, lpnmhdr->code, (pSCNotification) msg->lParam); } } } else if (nCode >= 0 && msg->message == WM_COMMAND && msg->lParam != 0) { char Name [255]; // Read Sender Class GetClassName ((HWND) msg->lParam, Name, 255); if (memcmp (Name, "Scintilla", 9) == 0) { // Perl contexte #ifdef PERL_OBJECT CPerl *pPerl; #endif LPPERLWIN32GUI_USERDATA perlud = (LPPERLWIN32GUI_USERDATA) GetWindowLong((HWND) msg->lParam, GWL_USERDATA); if (perlud != NULL) { #ifdef PERL_OBJECT pPerl = perlud->pPerl; #endif // Build name strcpy(Name, "main::"); strcat(Name, (char *) perlud->szWindowName); switch (HIWORD(msg->wParam)) { case SCEN_CHANGE : strcat(Name, "_Change"); DoEvent_Generic (NOTXSCALL Name); break; case SCEN_SETFOCUS : strcat(Name, "_GotFocus"); DoEvent_Generic (NOTXSCALL Name); break; case SCEN_KILLFOCUS : strcat(Name, "_LostFocus"); DoEvent_Generic (NOTXSCALL Name); break; } } } } return CallNextHookEx(hhook, nCode, wParam, lParam); } /*====================================================================*/ /* Win32::GUI::Scintilla package */ /*====================================================================*/ MODULE = Win32::GUI::Scintilla PACKAGE = Win32::GUI::Scintilla ########################################################################### # _Initialise() (internal) # Install Hook function void _Initialise() PREINIT: CODE: hhook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, (HINSTANCE) NULL, GetCurrentThreadId()); ########################################################################### # _UnInitialise() (internal) # Release Hook function void _UnInitialise() PREINIT: CODE: UnhookWindowsHookEx (hhook); ########################################################################### # SendMessageNP : Posts a message to a window # Take WPARAM as int and LPARAM as a LPVOID LRESULT SendMessageNP(handle,msg,wparam,lparam) HWND handle UINT msg WPARAM wparam LPVOID lparam CODE: RETVAL = SendMessage(handle, msg, (WPARAM) wparam, (LPARAM) lparam); OUTPUT: RETVAL ########################################################################### # SendMessagePP : Posts a message to a window # Take WPARAM and LPARAM as a LPVOID LRESULT SendMessagePP(handle,msg,wparam,lparam) HWND handle UINT msg LPVOID wparam LPVOID lparam CODE: RETVAL = SendMessage(handle, msg, (WPARAM) wparam, (LPARAM) lparam); OUTPUT: RETVAL --- NEW FILE: MANIFEST --- Changes Makefile.PL MANIFEST README Scintilla.pm Scintilla.xs Scintilla.pm.begin Scintilla.pm.end Perl.pm Typemap Include/autogen.pl Include/Readme.txt Include/Scintilla.iface Include/Scintilla.h Include/SciLexer.dll Samples/test.pl Samples/test2.pl Samples/Editor.pl --- NEW FILE: Changes --- Revision history for Perl extension Scintilla. 1.7 28/02/2004 - Use Scintilla 1.59 1.6 30/11/2003 - Use Scintilla 1.57 - Rewrite Makefile.pl 1.5 28/10/2003 - Use Scintilla 1.56 1.4 28/09/2003 - Correct -visible and -tabstop option (thank to Johan Lindström) - Use Scintilla 1.55 1.3 27/05/2003 - [UPDATE] Add Perl2Exe support (Automaticly add Scilexer.dll from current directory) Copy SciLexer.dll in script directory before run perl2exe. 1.2 26/05/2003 - [BUG] Correct some bugs (thank to Jeremy White again) - Add Win32::GUI::Scintilla::Perl (thank to Johan Lindström) - Add FindAndSelect method for simplify text search. - Add Perl2Exe support (Automaticly add Scilexer.dll from current directory) - Use Scintilla 1.53 1.1 14/03/2003 - [BUG] Correct LineLength call (thank to Jeremy White) - Add Change, LostFocus and GotFocus Events. - Use Scintilla 1.51 1.0 24/01/2003 - First release --- NEW FILE: Typemap --- TYPEMAP HWND T_HANDLE HTREEITEM T_IV LONG T_IV LPCTSTR T_PV LPTSTR T_PV DWORD T_IV UINT T_IV BOOL T_IV WPARAM T_IV LPARAM T_IV LRESULT T_IV HINSTANCE T_IV COLORREF T_COLOR LPCSTR T_PV FLOAT T_FLOAT LPVOID T_PV ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { if(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0) != NULL) $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0))); else $var = NULL; } else $var = ($type) SvIV($arg); --- NEW FILE: Scintilla.pm.end --- #------------------------------------------------------------------------ # End Autogenerate #------------------------------------------------------------------------ # Code Here because need constant #------------------------------------------------------------------------ # BraceHighEvent Management #------------------------------------------------------------------------ sub BraceHighEvent { my $self = shift; my $braces = shift || "[]{}()"; my $braceAtCaret = -1; my $braceOpposite = -1; my $caretPos = $self->GetCurrentPos(); [...2435 lines suppressed...] =item C<Lexer constant> See Scintilla.pm SCLEX_* contante for lexer language. SCE_* for lexer constante. See comment for relation between Lexer language and lexer constante. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage :http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut |
From: jw <jw...@us...> - 2005-11-01 10:37:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Scintilla/Include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23874/Include Added Files: Readme.txt SciLexer.dll Scintilla.h Scintilla.iface autogen.pl Log Message: Added to repository --- NEW FILE: Scintilla.iface --- ## First line may be used for shbang ## This file defines the interface to Scintilla ## Copyright 2000-2003 by Neil Hodgson <ne...@sc...> ## The License.txt file describes the conditions under which this software may be distributed. ## A line starting with ## is a pure comment and should be stripped by readers. ## A line starting with #! is for future shbang use ## A line starting with # followed by a space is a documentation comment and refers ## to the next feature definition. ## Each feature is defined by a line starting with fun, get, set, val or evt. ## cat -> start a category ## fun -> a function ## get -> a property get function ## set -> a property set function ## val -> definition of a constant ## evt -> an event [...2399 lines suppressed...] evt void URIDropped=2015(string text) evt void DwellStart=2016(int position) evt void DwellEnd=2017(int position) evt void Zoom=2018(void) evt void HotSpotClick=2019(int modifiers, int position) evt void HotSpotDoubleClick=2020(int modifiers, int position) evt void CallTipClick=2021(int position) cat Deprecated # CARET_POLICY changed in 1.47 fun void SetCaretPolicy=2369(int caretPolicy, int caretSlop) val CARET_CENTER=0x02 val CARET_XEVEN=0x08 val CARET_XJUMPS=0x10 # The old name for SCN_UPDATEUI val SCN_CHECKBRACE=2007 evt void PosChanged=2012(int position) --- NEW FILE: Readme.txt --- Scilexer.dll : Scintilla control with lexer. Scintilla.h : C include file of Scintilla control. Scintilla.iface : Interface desciption of Scintilla control. Autogen.pl : Build Scintilla.pm from Scintilla.pm.begin, Scintilla.pm.end and Scintilla.iface. --- NEW FILE: autogen.pl --- #! perl open G, ">Scintilla.pm" or return 1; # Add Startup open F, "<scintilla.pm.begin" or return 1; while ( <F> ) { print G $_; } close F; # Build Scintilla interface open F, "<include/scintilla.iface" or return 2; while ( <F> ) { #--- Constant --- if (/^val (.*)=(.*)$/) { print G "use constant $1 => $2 ;\n"; } #--- Get --- elsif (/^get colour (.*)=(.*)\(,\)$/ ) { print G "sub $1 {\n my \$self = shift;\n my \$colour = \$self->SendMessage ($2, 0, 0);\n \$colour = sprintf ('#%x', \$colour);\n \$colour =~ s/(.)(..)(..)(..)/\$1\$4\$3\$2/;\n return \$colour;\n}\n"; } elsif (/^get colour (.*)=(.*)\(int (.*),\)$/ ) { print G "sub $1 {\n my (\$self, \$$3) = \@_;\n my \$colour = \$self->SendMessage ($2, \$$3, 0);\n \$colour = sprintf ('#%x', \$colour);\n \$colour =~ s/(.)(..)(..)(..)/\$1\$4\$3\$2/;\n return \$colour;\n}"; } elsif (/^get (.*) (.*)=(.*)\(,\)$/ ) { print G "sub $2 {\n my \$self = shift;\n return \$self->SendMessage ($3, 0, 0);\n}\n"; } elsif (/^get int GetCharAt=2007\(position pos,\)$/ ) { print G "sub GetCharAt {\n my (\$self, \$pos) = \@_;\n return chr \$self->SendMessage (2007, \$pos, 0);\n}\n"; } elsif (/^get (.*) (.*)=(.*)\(position (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^get (.*) (.*)=(.*)\(int (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^get (.*) (.*)=(.*)\(int (.*), int (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessage ($3, \$$4, \$$5);\n}\n"; } #--- Set --- elsif (/^set (.*) (.*)=(.*)\(,\)$/ ) { print G "sub $2 {\n my \$self = shift;\n return \$self->SendMessage ($3, 0, 0);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(bool (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(int (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(position (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(colour (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n \$$4 =~ s/.(..)(..)(..)/\$3\$2\$1/;\n return \$self->SendMessage ($3, int hex \$$4, 0);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(int (.*), int (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessage ($3, \$$4, \$$5);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(int (.*), bool (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessage ($3, \$$4, \$$5);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(bool (.*), colour (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n \$$5 =~ s/.(..)(..)(..)/\$3\$2\$1/;\n return \$self->SendMessage ($3, \$$4, int hex \$$5);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(int (.*), colour (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n \$$5 =~ s/.(..)(..)(..)/\$3\$2\$1/;\n return \$self->SendMessage ($3, \$$4, int hex \$$5);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(int (.*), string (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessageNP ($3, \$$4, \$$5);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(string (.*), string (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessagePP ($3, \$$4, \$$5);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(, string (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessageNP ($3, 0, \$$4);\n}\n"; } elsif (/^set (.*) (.*)=(.*)\(,\s?int (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, 0, \$$4);\n}\n"; } #--- Special Function --- # AddText, ReplaceTarget, ReplaceTargetRE, SearchInTarget, AppendText, CopyText elsif (/^fun (.*) (.*)=(.*)\(int length, string text\)$/ ) { print G "# $2(text)\n"; print G "sub $2 {\n"; print G ' my ($self, $text) = @_;', "\n"; print G ' my $length = length $text;', "\n"; print G " return \$self->SendMessageNP ($3, \$length, \$text);\n"; print G '}', "\n"; } # AddStyledText elsif (/^fun void AddStyledText=2002\(int length, cells c\)$/ ) { print G '# AddStyledText(styledtext)', "\n"; print G 'sub AddStyledText {', "\n"; print G ' my ($self, $text) = @_;', "\n"; print G ' my $length = length $text;', "\n"; print G ' return $self->SendMessageNP (2002, $length, $text);', "\n"; print G '}', "\n"; } # GetStyledText and GetTextRange elsif (/^fun (.*) (.*)=(.*)\(, textrange (.*)\)$/ ) { print G "sub $2 {\n my \$self = shift;\n my \$start = shift || 0;\n my \$end = shift || \$self->GetLength();\n\n"; print G " return undef if \$start >= \$end;\n\n"; if ( $2 eq 'GetStyledText') { print G " my \$text = \" \" x ((\$end - \$start + 1)*2);\n"; } else { print G " my \$text = \" \" x (\$end - \$start + 1);\n"; } print G " my \$textrange = pack(\"LLp\", \$start, \$end, \$text);\n"; print G " \$self->SendMessageNP ($3, 0, \$textrange);\n"; print G " return \$text;\n}\n"; } # GetCurLine elsif (/^fun int GetCurLine=2027\(int length, stringresult text\)$/) { print G '# GetCurline () : Return curent line Text', "\n"; print G 'sub GetCurLine {', "\n"; print G ' my ($self) = @_;',"\n"; print G ' my $line = $self->GetLineFromPosition ($self->GetCurrentPos());',"\n"; print G ' my $lenght = $self->LineLength($line);',"\n"; print G ' my $text = " " x ($lenght+1);',"\n\n"; print G ' if ($self->SendMessageNP (2027, $lenght, $text)) {',"\n"; print G ' return $text;',"\n"; print G ' } else {',"\n"; print G ' return undef;',"\n"; print G ' }',"\n"; print G '}',"\n"; } # GetLine elsif (/^fun int GetLine=2153\(int line, stringresult text\)/) { print G '# Getline (line)', "\n"; print G 'sub GetLine {', "\n"; print G ' my ($self, $line) = @_;', "\n"; print G ' my $lenght = $self->LineLength($line);', "\n"; print G ' my $text = " " x ($lenght + 1);', "\n\n"; print G ' if ($self->SendMessageNP (2153, $line, $text)) {', "\n"; print G ' return $text;', "\n"; print G ' } else {', "\n"; print G ' return undef;', "\n"; print G ' }', "\n"; print G '}', "\n"; } # GetSelText elsif (/^fun int GetSelText=2161\(, stringresult text\)/) { print G '# GetSelText() : Return selected text', "\n"; print G 'sub GetSelText {', "\n"; print G ' my $self = shift;', "\n"; print G ' my $start = $self->GetSelectionStart();', "\n"; print G ' my $end = $self->GetSelectionEnd();', "\n\n"; print G ' return undef if $start >= $end;', "\n"; print G ' my $text = " " x ($end - $start + 1);', "\n\n"; print G ' $self->SendMessageNP (2161, 0, $text);', "\n"; print G ' return $text;', "\n"; print G '}', "\n"; } # GetText : elsif (/^fun int GetText=2182\(int length, stringresult text\)/) { print G '# GetText() : Return all text', "\n"; print G 'sub GetText {', "\n"; print G ' my $self = shift;', "\n"; print G ' my $lenght = $self->GetTextLength() + 1;', "\n"; print G ' my $text = " " x ($lenght+1);', "\n\n"; print G ' if ($self->SendMessageNP (2182, $lenght, $text)) {', "\n"; print G ' return $text;', "\n"; print G ' } else {', "\n"; print G ' return undef;', "\n"; print G ' }', "\n"; print G '}', "\n"; } # FindText : elsif (/^fun position FindText=2150\(int flags, findtext ft\)/) { print G '# FindText (textToFind, start=0, end=GetLength(), flag = SCFIND_WHOLEWORD)', "\n"; print G 'sub FindText {', "\n"; print G ' my $self = shift;', "\n"; print G ' my $text = shift;', "\n"; print G ' my $start = shift || 0;', "\n"; print G ' my $end = shift || $self->GetLength();', "\n"; print G ' my $flag = shift || SCFIND_WHOLEWORD;', "\n\n"; print G ' return undef if $start >= $end;', "\n\n"; print G ' my $texttofind = pack("LLpLL", $start, $end, $text, 0, 0);', "\n"; print G ' my $pos = $self->SendMessageNP (2150, $flag, $texttofind);', "\n"; print G ' return $pos unless defined wantarray;', "\n"; print G ' my @res = unpack("LLpLL", $texttofind);', "\n"; print G ' return ($res[3], $res[4]); # pos , lenght', "\n"; print G '}', "\n"; } # FindRange : elsif (/^fun position FormatRange=2151\(bool draw, formatrange fr\)/) { print G '# FormatRange (start=0, end=GetLength(), draw=1)', "\n"; print G 'sub FormatRange {', "\n"; print G ' my $self = shift;', "\n"; print G ' my $start = shift || 0;', "\n"; print G ' my $end = shift || $self->GetLength();', "\n"; print G ' my $draw = shift || 1;', "\n"; print G ' return undef if $start >= $end;', "\n\n"; print G ' my $formatrange = pack("LL", $start, $end);', "\n"; print G ' return $self->SendMessageNP (2151, $draw, $formatrange);', "\n"; print G '}', "\n"; } #--- Function --- elsif (/^fun (.*) (.*)=(.*)\(,\)$/ ) { print G "sub $2 {\n my \$self = shift;\n return \$self->SendMessage ($3, 0, 0);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(bool (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(int (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(position (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, \$$4, 0);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(, position (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, 0, \$$4);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(int (.*), int (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessage ($3, \$$4, \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(int (.*), colour (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n \$$5 =~ s/.(..)(..)(..)/\$3\$2\$1/;\n return \$self->SendMessage ($3, \$$4, int hex \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(int (.*), string (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessageNP ($3, \$$4, \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(, string (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessageNP ($3, 0, \$$4);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(, int (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4) = \@_;\n return \$self->SendMessage ($3, 0, \$$4);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(position (.*), string (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessageNP ($3, \$$4, \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(position (.*), bool (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessage ($3, \$$4, \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(position (.*), int (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessage ($3, \$$4, \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(position (.*), position (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessage ($3, \$$4, \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(bool (.*), colour (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n \$$5 =~ s/.(..)(..)(..)/\$3\$2\$1/;\n return \$self->SendMessage ($3, \$$4, int hex \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(int (.*), cells (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$$4, \$$5) = \@_;\n return \$self->SendMessageNP ($3, \$$4, \$$5);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(keymod (.*),\)$/ ) { print G "sub $2 {\n my (\$self, \$key, \$modifiers) = \@_;\n"; print G " my \$param = pack ('ss', \$key, \$modifiers);\n"; print G " return \$self->SendMessage ($3, \$param, 0);\n}\n"; } elsif (/^fun (.*) (.*)=(.*)\(keymod (.*), int (.*)\)$/ ) { print G "sub $2 {\n my (\$self, \$key, \$modifiers, \$$5) = \@_;\n"; print G " my \$param = pack ('ss', \$key, \$modifiers);\n"; print G " return \$self->SendMessage ($3, \$param, \$$5);\n}\n"; } #--- Comment --- elsif (/^\#\s(.*)$/) { print G "# $1\n"; } elsif (/^lex (.*)$/) { print G "# $1\n"; } #--- Error ---- elsif (/^fun (.*)$/) { print "===> Function = $1\n"; } elsif (/^set (.*)$/) { print "===> Set = $1\n"; } elsif (/^get (.*)$/) { print "===> Get = $1\n"; } } close F; # Add End open F, "<scintilla.pm.end" or return 3; while ( <F> ) { print G $_; } close F; close G; --- NEW FILE: SciLexer.dll --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Scintilla.h --- // Scintilla source code edit control /** @file Scintilla.h ** Interface to the edit control. **/ // Copyright 1998-2003 by Neil Hodgson <ne...@sc...> // The License.txt file describes the conditions under which this software may be distributed. // Most of this file is automatically generated from the Scintilla.iface interface definition // file which contains any comments about the definitions. HFacer.py does the generation. #ifndef SCINTILLA_H #define SCINTILLA_H #if PLAT_WIN // Return false on failure: bool Scintilla_RegisterClasses(void *hInstance); bool Scintilla_ReleaseResources(); #endif int Scintilla_LinkLexers(); // Here should be placed typedefs for uptr_t, an unsigned integer type large enough to // hold a pointer and sptr_t, a signed integer large enough to hold a pointer. // May need to be changed for 64 bit platforms. #if _MSC_VER >= 1300 #include <BaseTsd.h> #endif #ifdef MAXULONG_PTR typedef ULONG_PTR uptr_t; typedef LONG_PTR sptr_t; #else typedef unsigned long uptr_t; typedef long sptr_t; #endif typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam); //++Autogenerated -- start of section automatically generated from Scintilla.iface #define INVALID_POSITION -1 #define SCI_START 2000 #define SCI_OPTIONAL_START 3000 #define SCI_LEXER_START 4000 #define SCI_ADDTEXT 2001 #define SCI_ADDSTYLEDTEXT 2002 #define SCI_INSERTTEXT 2003 #define SCI_CLEARALL 2004 #define SCI_CLEARDOCUMENTSTYLE 2005 #define SCI_GETLENGTH 2006 #define SCI_GETCHARAT 2007 #define SCI_GETCURRENTPOS 2008 #define SCI_GETANCHOR 2009 #define SCI_GETSTYLEAT 2010 #define SCI_REDO 2011 #define SCI_SETUNDOCOLLECTION 2012 #define SCI_SELECTALL 2013 #define SCI_SETSAVEPOINT 2014 #define SCI_GETSTYLEDTEXT 2015 #define SCI_CANREDO 2016 #define SCI_MARKERLINEFROMHANDLE 2017 #define SCI_MARKERDELETEHANDLE 2018 #define SCI_GETUNDOCOLLECTION 2019 #define SCWS_INVISIBLE 0 #define SCWS_VISIBLEALWAYS 1 #define SCWS_VISIBLEAFTERINDENT 2 #define SCI_GETVIEWWS 2020 #define SCI_SETVIEWWS 2021 #define SCI_POSITIONFROMPOINT 2022 #define SCI_POSITIONFROMPOINTCLOSE 2023 #define SCI_GOTOLINE 2024 #define SCI_GOTOPOS 2025 #define SCI_SETANCHOR 2026 #define SCI_GETCURLINE 2027 #define SCI_GETENDSTYLED 2028 #define SC_EOL_CRLF 0 #define SC_EOL_CR 1 #define SC_EOL_LF 2 #define SCI_CONVERTEOLS 2029 #define SCI_GETEOLMODE 2030 #define SCI_SETEOLMODE 2031 #define SCI_STARTSTYLING 2032 #define SCI_SETSTYLING 2033 #define SCI_GETBUFFEREDDRAW 2034 #define SCI_SETBUFFEREDDRAW 2035 #define SCI_SETTABWIDTH 2036 #define SCI_GETTABWIDTH 2121 #define SC_CP_UTF8 65001 #define SC_CP_DBCS 1 #define SCI_SETCODEPAGE 2037 #define SCI_SETUSEPALETTE 2039 #define MARKER_MAX 31 #define SC_MARK_CIRCLE 0 #define SC_MARK_ROUNDRECT 1 #define SC_MARK_ARROW 2 #define SC_MARK_SMALLRECT 3 #define SC_MARK_SHORTARROW 4 #define SC_MARK_EMPTY 5 #define SC_MARK_ARROWDOWN 6 #define SC_MARK_MINUS 7 #define SC_MARK_PLUS 8 #define SC_MARK_VLINE 9 #define SC_MARK_LCORNER 10 #define SC_MARK_TCORNER 11 #define SC_MARK_BOXPLUS 12 #define SC_MARK_BOXPLUSCONNECTED 13 #define SC_MARK_BOXMINUS 14 #define SC_MARK_BOXMINUSCONNECTED 15 #define SC_MARK_LCORNERCURVE 16 #define SC_MARK_TCORNERCURVE 17 #define SC_MARK_CIRCLEPLUS 18 #define SC_MARK_CIRCLEPLUSCONNECTED 19 #define SC_MARK_CIRCLEMINUS 20 #define SC_MARK_CIRCLEMINUSCONNECTED 21 #define SC_MARK_BACKGROUND 22 #define SC_MARK_DOTDOTDOT 23 #define SC_MARK_ARROWS 24 #define SC_MARK_PIXMAP 25 #define SC_MARK_CHARACTER 10000 #define SC_MARKNUM_FOLDEREND 25 #define SC_MARKNUM_FOLDEROPENMID 26 #define SC_MARKNUM_FOLDERMIDTAIL 27 #define SC_MARKNUM_FOLDERTAIL 28 #define SC_MARKNUM_FOLDERSUB 29 #define SC_MARKNUM_FOLDER 30 #define SC_MARKNUM_FOLDEROPEN 31 #define SC_MASK_FOLDERS 0xFE000000 #define SCI_MARKERDEFINE 2040 #define SCI_MARKERSETFORE 2041 #define SCI_MARKERSETBACK 2042 #define SCI_MARKERADD 2043 #define SCI_MARKERDELETE 2044 #define SCI_MARKERDELETEALL 2045 #define SCI_MARKERGET 2046 #define SCI_MARKERNEXT 2047 #define SCI_MARKERPREVIOUS 2048 #define SCI_MARKERDEFINEPIXMAP 2049 #define SC_MARGIN_SYMBOL 0 #define SC_MARGIN_NUMBER 1 #define SCI_SETMARGINTYPEN 2240 #define SCI_GETMARGINTYPEN 2241 #define SCI_SETMARGINWIDTHN 2242 #define SCI_GETMARGINWIDTHN 2243 #define SCI_SETMARGINMASKN 2244 #define SCI_GETMARGINMASKN 2245 #define SCI_SETMARGINSENSITIVEN 2246 #define SCI_GETMARGINSENSITIVEN 2247 #define STYLE_DEFAULT 32 #define STYLE_LINENUMBER 33 #define STYLE_BRACELIGHT 34 #define STYLE_BRACEBAD 35 #define STYLE_CONTROLCHAR 36 #define STYLE_INDENTGUIDE 37 #define STYLE_LASTPREDEFINED 39 #define STYLE_MAX 127 #define SC_CHARSET_ANSI 0 #define SC_CHARSET_DEFAULT 1 #define SC_CHARSET_BALTIC 186 #define SC_CHARSET_CHINESEBIG5 136 #define SC_CHARSET_EASTEUROPE 238 #define SC_CHARSET_GB2312 134 #define SC_CHARSET_GREEK 161 #define SC_CHARSET_HANGUL 129 #define SC_CHARSET_MAC 77 #define SC_CHARSET_OEM 255 #define SC_CHARSET_RUSSIAN 204 #define SC_CHARSET_SHIFTJIS 128 #define SC_CHARSET_SYMBOL 2 #define SC_CHARSET_TURKISH 162 #define SC_CHARSET_JOHAB 130 #define SC_CHARSET_HEBREW 177 #define SC_CHARSET_ARABIC 178 #define SC_CHARSET_VIETNAMESE 163 #define SC_CHARSET_THAI 222 #define SCI_STYLECLEARALL 2050 #define SCI_STYLESETFORE 2051 #define SCI_STYLESETBACK 2052 #define SCI_STYLESETBOLD 2053 #define SCI_STYLESETITALIC 2054 #define SCI_STYLESETSIZE 2055 #define SCI_STYLESETFONT 2056 #define SCI_STYLESETEOLFILLED 2057 #define SCI_STYLERESETDEFAULT 2058 #define SCI_STYLESETUNDERLINE 2059 #define SC_CASE_MIXED 0 #define SC_CASE_UPPER 1 #define SC_CASE_LOWER 2 #define SCI_STYLESETCASE 2060 #define SCI_STYLESETCHARACTERSET 2066 #define SCI_STYLESETHOTSPOT 2409 #define SCI_SETSELFORE 2067 #define SCI_SETSELBACK 2068 #define SCI_SETCARETFORE 2069 #define SCI_ASSIGNCMDKEY 2070 #define SCI_CLEARCMDKEY 2071 #define SCI_CLEARALLCMDKEYS 2072 #define SCI_SETSTYLINGEX 2073 #define SCI_STYLESETVISIBLE 2074 #define SCI_GETCARETPERIOD 2075 #define SCI_SETCARETPERIOD 2076 #define SCI_SETWORDCHARS 2077 #define SCI_BEGINUNDOACTION 2078 #define SCI_ENDUNDOACTION 2079 #define INDIC_MAX 7 #define INDIC_PLAIN 0 #define INDIC_SQUIGGLE 1 #define INDIC_TT 2 #define INDIC_DIAGONAL 3 #define INDIC_STRIKE 4 #define INDIC_HIDDEN 5 #define INDIC_BOX 6 #define INDIC0_MASK 0x20 #define INDIC1_MASK 0x40 #define INDIC2_MASK 0x80 #define INDICS_MASK 0xE0 #define SCI_INDICSETSTYLE 2080 #define SCI_INDICGETSTYLE 2081 #define SCI_INDICSETFORE 2082 #define SCI_INDICGETFORE 2083 #define SCI_SETWHITESPACEFORE 2084 #define SCI_SETWHITESPACEBACK 2085 #define SCI_SETSTYLEBITS 2090 #define SCI_GETSTYLEBITS 2091 #define SCI_SETLINESTATE 2092 #define SCI_GETLINESTATE 2093 #define SCI_GETMAXLINESTATE 2094 #define SCI_GETCARETLINEVISIBLE 2095 #define SCI_SETCARETLINEVISIBLE 2096 #define SCI_GETCARETLINEBACK 2097 #define SCI_SETCARETLINEBACK 2098 #define SCI_STYLESETCHANGEABLE 2099 #define SCI_AUTOCSHOW 2100 #define SCI_AUTOCCANCEL 2101 #define SCI_AUTOCACTIVE 2102 #define SCI_AUTOCPOSSTART 2103 #define SCI_AUTOCCOMPLETE 2104 #define SCI_AUTOCSTOPS 2105 #define SCI_AUTOCSETSEPARATOR 2106 #define SCI_AUTOCGETSEPARATOR 2107 #define SCI_AUTOCSELECT 2108 #define SCI_AUTOCSETCANCELATSTART 2110 #define SCI_AUTOCGETCANCELATSTART 2111 #define SCI_AUTOCSETFILLUPS 2112 #define SCI_AUTOCSETCHOOSESINGLE 2113 #define SCI_AUTOCGETCHOOSESINGLE 2114 #define SCI_AUTOCSETIGNORECASE 2115 #define SCI_AUTOCGETIGNORECASE 2116 #define SCI_USERLISTSHOW 2117 #define SCI_AUTOCSETAUTOHIDE 2118 #define SCI_AUTOCGETAUTOHIDE 2119 #define SCI_AUTOCSETDROPRESTOFWORD 2270 #define SCI_AUTOCGETDROPRESTOFWORD 2271 #define SCI_REGISTERIMAGE 2405 #define SCI_CLEARREGISTEREDIMAGES 2408 #define SCI_AUTOCGETTYPESEPARATOR 2285 #define SCI_AUTOCSETTYPESEPARATOR 2286 #define SCI_SETINDENT 2122 #define SCI_GETINDENT 2123 #define SCI_SETUSETABS 2124 #define SCI_GETUSETABS 2125 #define SCI_SETLINEINDENTATION 2126 #define SCI_GETLINEINDENTATION 2127 #define SCI_GETLINEINDENTPOSITION 2128 #define SCI_GETCOLUMN 2129 #define SCI_SETHSCROLLBAR 2130 #define SCI_GETHSCROLLBAR 2131 #define SCI_SETINDENTATIONGUIDES 2132 #define SCI_GETINDENTATIONGUIDES 2133 #define SCI_SETHIGHLIGHTGUIDE 2134 #define SCI_GETHIGHLIGHTGUIDE 2135 #define SCI_GETLINEENDPOSITION 2136 #define SCI_GETCODEPAGE 2137 #define SCI_GETCARETFORE 2138 #define SCI_GETUSEPALETTE 2139 #define SCI_GETREADONLY 2140 #define SCI_SETCURRENTPOS 2141 #define SCI_SETSELECTIONSTART 2142 #define SCI_GETSELECTIONSTART 2143 #define SCI_SETSELECTIONEND 2144 #define SCI_GETSELECTIONEND 2145 #define SCI_SETPRINTMAGNIFICATION 2146 #define SCI_GETPRINTMAGNIFICATION 2147 #define SC_PRINT_NORMAL 0 #define SC_PRINT_INVERTLIGHT 1 #define SC_PRINT_BLACKONWHITE 2 #define SC_PRINT_COLOURONWHITE 3 #define SC_PRINT_COLOURONWHITEDEFAULTBG 4 #define SCI_SETPRINTCOLOURMODE 2148 #define SCI_GETPRINTCOLOURMODE 2149 #define SCFIND_WHOLEWORD 2 #define SCFIND_MATCHCASE 4 #define SCFIND_WORDSTART 0x00100000 #define SCFIND_REGEXP 0x00200000 #define SCFIND_POSIX 0x00400000 #define SCI_FINDTEXT 2150 #define SCI_FORMATRANGE 2151 #define SCI_GETFIRSTVISIBLELINE 2152 #define SCI_GETLINE 2153 #define SCI_GETLINECOUNT 2154 #define SCI_SETMARGINLEFT 2155 #define SCI_GETMARGINLEFT 2156 #define SCI_SETMARGINRIGHT 2157 #define SCI_GETMARGINRIGHT 2158 #define SCI_GETMODIFY 2159 #define SCI_SETSEL 2160 #define SCI_GETSELTEXT 2161 #define SCI_GETTEXTRANGE 2162 #define SCI_HIDESELECTION 2163 #define SCI_POINTXFROMPOSITION 2164 #define SCI_POINTYFROMPOSITION 2165 #define SCI_LINEFROMPOSITION 2166 #define SCI_POSITIONFROMLINE 2167 #define SCI_LINESCROLL 2168 #define SCI_SCROLLCARET 2169 #define SCI_REPLACESEL 2170 #define SCI_SETREADONLY 2171 #define SCI_NULL 2172 #define SCI_CANPASTE 2173 #define SCI_CANUNDO 2174 #define SCI_EMPTYUNDOBUFFER 2175 #define SCI_UNDO 2176 #define SCI_CUT 2177 #define SCI_COPY 2178 #define SCI_PASTE 2179 #define SCI_CLEAR 2180 #define SCI_SETTEXT 2181 #define SCI_GETTEXT 2182 #define SCI_GETTEXTLENGTH 2183 #define SCI_GETDIRECTFUNCTION 2184 #define SCI_GETDIRECTPOINTER 2185 #define SCI_SETOVERTYPE 2186 #define SCI_GETOVERTYPE 2187 #define SCI_SETCARETWIDTH 2188 #define SCI_GETCARETWIDTH 2189 #define SCI_SETTARGETSTART 2190 #define SCI_GETTARGETSTART 2191 #define SCI_SETTARGETEND 2192 #define SCI_GETTARGETEND 2193 #define SCI_REPLACETARGET 2194 #define SCI_REPLACETARGETRE 2195 #define SCI_SEARCHINTARGET 2197 #define SCI_SETSEARCHFLAGS 2198 #define SCI_GETSEARCHFLAGS 2199 #define SCI_CALLTIPSHOW 2200 #define SCI_CALLTIPCANCEL 2201 #define SCI_CALLTIPACTIVE 2202 #define SCI_CALLTIPPOSSTART 2203 #define SCI_CALLTIPSETHLT 2204 #define SCI_CALLTIPSETBACK 2205 #define SCI_CALLTIPSETFORE 2206 #define SCI_CALLTIPSETFOREHLT 2207 #define SCI_VISIBLEFROMDOCLINE 2220 #define SCI_DOCLINEFROMVISIBLE 2221 #define SC_FOLDLEVELBASE 0x400 #define SC_FOLDLEVELWHITEFLAG 0x1000 #define SC_FOLDLEVELHEADERFLAG 0x2000 #define SC_FOLDLEVELBOXHEADERFLAG 0x4000 #define SC_FOLDLEVELBOXFOOTERFLAG 0x8000 #define SC_FOLDLEVELCONTRACTED 0x10000 #define SC_FOLDLEVELUNINDENT 0x20000 #define SC_FOLDLEVELNUMBERMASK 0x0FFF #define SCI_SETFOLDLEVEL 2222 #define SCI_GETFOLDLEVEL 2223 #define SCI_GETLASTCHILD 2224 #define SCI_GETFOLDPARENT 2225 #define SCI_SHOWLINES 2226 #define SCI_HIDELINES 2227 #define SCI_GETLINEVISIBLE 2228 #define SCI_SETFOLDEXPANDED 2229 #define SCI_GETFOLDEXPANDED 2230 #define SCI_TOGGLEFOLD 2231 #define SCI_ENSUREVISIBLE 2232 #define SC_FOLDFLAG_LINEBEFORE_EXPANDED 0x0002 #define SC_FOLDFLAG_LINEBEFORE_CONTRACTED 0x0004 #define SC_FOLDFLAG_LINEAFTER_EXPANDED 0x0008 #define SC_FOLDFLAG_LINEAFTER_CONTRACTED 0x0010 #define SC_FOLDFLAG_LEVELNUMBERS 0x0040 #define SC_FOLDFLAG_BOX 0x0001 #define SCI_SETFOLDFLAGS 2233 #define SCI_ENSUREVISIBLEENFORCEPOLICY 2234 #define SCI_SETTABINDENTS 2260 #define SCI_GETTABINDENTS 2261 #define SCI_SETBACKSPACEUNINDENTS 2262 #define SCI_GETBACKSPACEUNINDENTS 2263 #define SC_TIME_FOREVER 10000000 #define SCI_SETMOUSEDWELLTIME 2264 #define SCI_GETMOUSEDWELLTIME 2265 #define SCI_WORDSTARTPOSITION 2266 #define SCI_WORDENDPOSITION 2267 #define SC_WRAP_NONE 0 #define SC_WRAP_WORD 1 #define SCI_SETWRAPMODE 2268 #define SCI_GETWRAPMODE 2269 #define SC_CACHE_NONE 0 #define SC_CACHE_CARET 1 #define SC_CACHE_PAGE 2 #define SC_CACHE_DOCUMENT 3 #define SCI_SETLAYOUTCACHE 2272 #define SCI_GETLAYOUTCACHE 2273 #define SCI_SETSCROLLWIDTH 2274 #define SCI_GETSCROLLWIDTH 2275 #define SCI_TEXTWIDTH 2276 #define SCI_SETENDATLASTLINE 2277 #define SCI_GETENDATLASTLINE 2278 #define SCI_TEXTHEIGHT 2279 #define SCI_SETVSCROLLBAR 2280 #define SCI_GETVSCROLLBAR 2281 #define SCI_APPENDTEXT 2282 #define SCI_GETTWOPHASEDRAW 2283 #define SCI_SETTWOPHASEDRAW 2284 #define SCI_TARGETFROMSELECTION 2287 #define SCI_LINESJOIN 2288 #define SCI_LINESSPLIT 2289 #define SCI_SETFOLDMARGINCOLOUR 2290 #define SCI_SETFOLDMARGINHICOLOUR 2291 #define SCI_LINEDOWN 2300 #define SCI_LINEDOWNEXTEND 2301 #define SCI_LINEUP 2302 #define SCI_LINEUPEXTEND 2303 #define SCI_CHARLEFT 2304 #define SCI_CHARLEFTEXTEND 2305 #define SCI_CHARRIGHT 2306 #define SCI_CHARRIGHTEXTEND 2307 #define SCI_WORDLEFT 2308 #define SCI_WORDLEFTEXTEND 2309 #define SCI_WORDRIGHT 2310 #define SCI_WORDRIGHTEXTEND 2311 #define SCI_HOME 2312 #define SCI_HOMEEXTEND 2313 #define SCI_LINEEND 2314 #define SCI_LINEENDEXTEND 2315 #define SCI_DOCUMENTSTART 2316 #define SCI_DOCUMENTSTARTEXTEND 2317 #define SCI_DOCUMENTEND 2318 #define SCI_DOCUMENTENDEXTEND 2319 #define SCI_PAGEUP 2320 #define SCI_PAGEUPEXTEND 2321 #define SCI_PAGEDOWN 2322 #define SCI_PAGEDOWNEXTEND 2323 #define SCI_EDITTOGGLEOVERTYPE 2324 #define SCI_CANCEL 2325 #define SCI_DELETEBACK 2326 #define SCI_TAB 2327 #define SCI_BACKTAB 2328 #define SCI_NEWLINE 2329 #define SCI_FORMFEED 2330 #define SCI_VCHOME 2331 #define SCI_VCHOMEEXTEND 2332 #define SCI_ZOOMIN 2333 #define SCI_ZOOMOUT 2334 #define SCI_DELWORDLEFT 2335 #define SCI_DELWORDRIGHT 2336 #define SCI_LINECUT 2337 #define SCI_LINEDELETE 2338 #define SCI_LINETRANSPOSE 2339 #define SCI_LINEDUPLICATE 2404 #define SCI_LOWERCASE 2340 #define SCI_UPPERCASE 2341 #define SCI_LINESCROLLDOWN 2342 #define SCI_LINESCROLLUP 2343 #define SCI_DELETEBACKNOTLINE 2344 #define SCI_HOMEDISPLAY 2345 #define SCI_HOMEDISPLAYEXTEND 2346 #define SCI_LINEENDDISPLAY 2347 #define SCI_LINEENDDISPLAYEXTEND 2348 #define SCI_HOMEWRAP 2349 #define SCI_HOMEWRAPEXTEND 2450 #define SCI_LINEENDWRAP 2451 #define SCI_LINEENDWRAPEXTEND 2452 #define SCI_VCHOMEWRAP 2453 #define SCI_VCHOMEWRAPEXTEND 2454 #define SCI_LINECOPY 2455 #define SCI_MOVECARETINSIDEVIEW 2401 #define SCI_LINELENGTH 2350 #define SCI_BRACEHIGHLIGHT 2351 #define SCI_BRACEBADLIGHT 2352 #define SCI_BRACEMATCH 2353 #define SCI_GETVIEWEOL 2355 #define SCI_SETVIEWEOL 2356 #define SCI_GETDOCPOINTER 2357 #define SCI_SETDOCPOINTER 2358 #define SCI_SETMODEVENTMASK 2359 #define EDGE_NONE 0 #define EDGE_LINE 1 #define EDGE_BACKGROUND 2 #define SCI_GETEDGECOLUMN 2360 #define SCI_SETEDGECOLUMN 2361 #define SCI_GETEDGEMODE 2362 #define SCI_SETEDGEMODE 2363 #define SCI_GETEDGECOLOUR 2364 #define SCI_SETEDGECOLOUR 2365 #define SCI_SEARCHANCHOR 2366 #define SCI_SEARCHNEXT 2367 #define SCI_SEARCHPREV 2368 #define SCI_LINESONSCREEN 2370 #define SCI_USEPOPUP 2371 #define SCI_SELECTIONISRECTANGLE 2372 #define SCI_SETZOOM 2373 #define SCI_GETZOOM 2374 #define SCI_CREATEDOCUMENT 2375 #define SCI_ADDREFDOCUMENT 2376 #define SCI_RELEASEDOCUMENT 2377 #define SCI_GETMODEVENTMASK 2378 #define SCI_SETFOCUS 2380 #define SCI_GETFOCUS 2381 #define SCI_SETSTATUS 2382 #define SCI_GETSTATUS 2383 #define SCI_SETMOUSEDOWNCAPTURES 2384 #define SCI_GETMOUSEDOWNCAPTURES 2385 #define SC_CURSORNORMAL -1 #define SC_CURSORWAIT 4 #define SCI_SETCURSOR 2386 #define SCI_GETCURSOR 2387 #define SCI_SETCONTROLCHARSYMBOL 2388 #define SCI_GETCONTROLCHARSYMBOL 2389 #define SCI_WORDPARTLEFT 2390 #define SCI_WORDPARTLEFTEXTEND 2391 #define SCI_WORDPARTRIGHT 2392 #define SCI_WORDPARTRIGHTEXTEND 2393 #define VISIBLE_SLOP 0x01 #define VISIBLE_STRICT 0x04 #define SCI_SETVISIBLEPOLICY 2394 #define SCI_DELLINELEFT 2395 #define SCI_DELLINERIGHT 2396 #define SCI_SETXOFFSET 2397 #define SCI_GETXOFFSET 2398 #define SCI_CHOOSECARETX 2399 #define SCI_GRABFOCUS 2400 #define CARET_SLOP 0x01 #define CARET_STRICT 0x04 #define CARET_JUMPS 0x10 #define CARET_EVEN 0x08 #define SCI_SETXCARETPOLICY 2402 #define SCI_SETYCARETPOLICY 2403 #define SCI_SETPRINTWRAPMODE 2406 #define SCI_GETPRINTWRAPMODE 2407 #define SCI_SETHOTSPOTACTIVEFORE 2410 #define SCI_SETHOTSPOTACTIVEBACK 2411 #define SCI_SETHOTSPOTACTIVEUNDERLINE 2412 #define SCI_SETHOTSPOTSINGLELINE 2421 #define SCI_PARADOWN 2413 #define SCI_PARADOWNEXTEND 2414 #define SCI_PARAUP 2415 #define SCI_PARAUPEXTEND 2416 #define SCI_POSITIONBEFORE 2417 #define SCI_POSITIONAFTER 2418 #define SCI_COPYRANGE 2419 #define SCI_COPYTEXT 2420 #define SC_SEL_STREAM 0 #define SC_SEL_RECTANGLE 1 #define SC_SEL_LINES 2 #define SCI_SETSELECTIONMODE 2422 #define SCI_GETSELECTIONMODE 2423 #define SCI_GETLINESELSTARTPOSITION 2424 #define SCI_GETLINESELENDPOSITION 2425 #define SCI_LINEDOWNRECTEXTEND 2426 #define SCI_LINEUPRECTEXTEND 2427 #define SCI_CHARLEFTRECTEXTEND 2428 #define SCI_CHARRIGHTRECTEXTEND 2429 #define SCI_HOMERECTEXTEND 2430 #define SCI_VCHOMERECTEXTEND 2431 #define SCI_LINEENDRECTEXTEND 2432 #define SCI_PAGEUPRECTEXTEND 2433 #define SCI_PAGEDOWNRECTEXTEND 2434 #define SCI_STUTTEREDPAGEUP 2435 #define SCI_STUTTEREDPAGEUPEXTEND 2436 #define SCI_STUTTEREDPAGEDOWN 2437 #define SCI_STUTTEREDPAGEDOWNEXTEND 2438 #define SCI_WORDLEFTEND 2439 #define SCI_WORDLEFTENDEXTEND 2440 #define SCI_WORDRIGHTEND 2441 #define SCI_WORDRIGHTENDEXTEND 2442 #define SCI_SETWHITESPACECHARS 2443 #define SCI_SETCHARSDEFAULT 2444 #define SCI_AUTOCGETCURRENT 2445 #define SCI_ALLOCATE 2446 #define SCI_STARTRECORD 3001 #define SCI_STOPRECORD 3002 #define SCI_SETLEXER 4001 #define SCI_GETLEXER 4002 #define SCI_COLOURISE 4003 #define SCI_SETPROPERTY 4004 #define KEYWORDSET_MAX 8 #define SCI_SETKEYWORDS 4005 #define SCI_SETLEXERLANGUAGE 4006 #define SCI_LOADLEXERLIBRARY 4007 #define SC_MOD_INSERTTEXT 0x1 #define SC_MOD_DELETETEXT 0x2 #define SC_MOD_CHANGESTYLE 0x4 #define SC_MOD_CHANGEFOLD 0x8 #define SC_PERFORMED_USER 0x10 #define SC_PERFORMED_UNDO 0x20 #define SC_PERFORMED_REDO 0x40 #define SC_LASTSTEPINUNDOREDO 0x100 #define SC_MOD_CHANGEMARKER 0x200 #define SC_MOD_BEFOREINSERT 0x400 #define SC_MOD_BEFOREDELETE 0x800 #define SC_MODEVENTMASKALL 0xF77 #define SCEN_CHANGE 768 #define SCEN_SETFOCUS 512 #define SCEN_KILLFOCUS 256 #define SCK_DOWN 300 #define SCK_UP 301 #define SCK_LEFT 302 #define SCK_RIGHT 303 #define SCK_HOME 304 #define SCK_END 305 #define SCK_PRIOR 306 #define SCK_NEXT 307 #define SCK_DELETE 308 #define SCK_INSERT 309 #define SCK_ESCAPE 7 #define SCK_BACK 8 #define SCK_TAB 9 #define SCK_RETURN 13 #define SCK_ADD 310 #define SCK_SUBTRACT 311 #define SCK_DIVIDE 312 #define SCMOD_SHIFT 1 #define SCMOD_CTRL 2 #define SCMOD_ALT 4 #define SCN_STYLENEEDED 2000 #define SCN_CHARADDED 2001 #define SCN_SAVEPOINTREACHED 2002 #define SCN_SAVEPOINTLEFT 2003 #define SCN_MODIFYATTEMPTRO 2004 #define SCN_KEY 2005 #define SCN_DOUBLECLICK 2006 #define SCN_UPDATEUI 2007 #define SCN_MODIFIED 2008 #define SCN_MACRORECORD 2009 #define SCN_MARGINCLICK 2010 #define SCN_NEEDSHOWN 2011 #define SCN_PAINTED 2013 #define SCN_USERLISTSELECTION 2014 #define SCN_URIDROPPED 2015 #define SCN_DWELLSTART 2016 #define SCN_DWELLEND 2017 #define SCN_ZOOM 2018 #define SCN_HOTSPOTCLICK 2019 #define SCN_HOTSPOTDOUBLECLICK 2020 #define SCN_CALLTIPCLICK 2021 //--Autogenerated -- end of section automatically generated from Scintilla.iface // These structures are defined to be exactly the same shape as the Win32 // CHARRANGE, TEXTRANGE, FINDTEXTEX, FORMATRANGE, and NMHDR structs. // So older code that treats Scintilla as a RichEdit will work. struct CharacterRange { long cpMin; long cpMax; }; struct TextRange { struct CharacterRange chrg; char *lpstrText; }; struct TextToFind { struct CharacterRange chrg; char *lpstrText; struct CharacterRange chrgText; }; #ifdef PLATFORM_H // This structure is used in printing and requires some of the graphics types // from Platform.h. Not needed by most client code. struct RangeToFormat { SurfaceID hdc; SurfaceID hdcTarget; PRectangle rc; PRectangle rcPage; CharacterRange chrg; }; #endif struct NotifyHeader { // hwndFrom is really an environment specifc window handle or pointer // but most clients of Scintilla.h do not have this type visible. //WindowID hwndFrom; void *hwndFrom; unsigned int idFrom; unsigned int code; }; struct SCNotification { struct NotifyHeader nmhdr; int position; // SCN_STYLENEEDED, SCN_MODIFIED, SCN_DWELLSTART, SCN_DWELLEND int ch; // SCN_CHARADDED, SCN_KEY int modifiers; // SCN_KEY int modificationType; // SCN_MODIFIED const char *text; // SCN_MODIFIED int length; // SCN_MODIFIED int linesAdded; // SCN_MODIFIED int message; // SCN_MACRORECORD uptr_t wParam; // SCN_MACRORECORD sptr_t lParam; // SCN_MACRORECORD int line; // SCN_MODIFIED int foldLevelNow; // SCN_MODIFIED int foldLevelPrev; // SCN_MODIFIED int margin; // SCN_MARGINCLICK int listType; // SCN_USERLISTSELECTION int x; // SCN_DWELLSTART, SCN_DWELLEND int y; // SCN_DWELLSTART, SCN_DWELLEND }; // Deprecation section listing all API features that are deprecated and will // will be removed completely in a future version. // To enable these features define INCLUDE_DEPRECATED_FEATURES #ifdef INCLUDE_DEPRECATED_FEATURES #define SCI_SETCARETPOLICY 2369 #define CARET_CENTER 0x02 #define CARET_XEVEN 0x08 #define CARET_XJUMPS 0x10 #define SCN_POSCHANGED 2012 #define SCN_CHECKBRACE 2007 #endif #endif |
From: jw <jw...@us...> - 2005-11-01 10:36:59
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Scintilla/Samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23874/Samples Added Files: Editor.pl test.pl test2.pl Log Message: Added to repository --- NEW FILE: test2.pl --- # perl -w use Win32::GUI; use Win32::GUI::Scintilla; use Win32::GUI::Scintilla::Perl; # main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Scintilla test", -pos => [100, 100], -size => [400, 400], ) or die "new Window"; # Create Scintilla Edit Window # $Edit = new Win32::GUI::Scintilla ( # -parent => $Window, # Or $Edit = $Window->AddScintillaPerl ( -name => "Edit", -pos => [0, 0], -size => [400, 400], -text => "my \$Test\n", ) or die "new Edit"; # Call Some method $Edit->AddText ("if (\$i == 1) {\n \$i++;\n}\n"); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } # Main window resize sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Edit->Resize ($width, $height); } } # Scintilla Event Notification sub Edit_Notify { my (%evt) = @_; print "Edit Notify = ", %evt, "\n"; } --- NEW FILE: test.pl --- # perl -w use Win32::GUI; use Win32::GUI::Scintilla; # main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Scintilla test", -pos => [100, 100], -size => [400, 400], ) or die "new Window"; $Edit = $Window->AddButton ( -name => "Test", -text => "Test", -pos => [0, 0], -size => [100, 10], ); # Create Scintilla Edit Window # $Edit = new Win32::GUI::Scintilla ( # -parent => $Window, # Or $Edit = $Window->AddScintilla ( -name => "Edit", -pos => [0, 10], -size => [400, 400], -text => "Test\n", ) or die "new Edit"; # Call Some method $Edit->AddText ("add\n"); $Edit->AppendText ("append\n"); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { # Call Some method print "GetText = ", $Edit->GetText(), "\n"; print "GetLine(1) = ", $Edit->GetLine(1), "\n"; print "GetSelText = ", $Edit->GetSelText(), "\n"; print "GetTextRange(2) = ", $Edit->GetTextRange(2), "\n"; print "GetTextRange(2, 6) = ", $Edit->GetTextRange(2, 6), "\n"; return -1; } # Main window resize sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Edit->Move (0, 10); $Edit->Resize ($width, $height-10); } } # Scintilla Event Notification sub Edit_Notify { my (%evt) = @_; # print "Edit Notify = ", %evt, "\n"; } sub Edit_Change { print "Change!!!\n"; } sub Edit_GotFocus { print "GotFocus!!!\n"; } sub Edit_LostFocus { print "LostFocus!!!\n"; } --- NEW FILE: Editor.pl --- # Perl Editor #----------------------------------------------------------------------- # perl -v use strict; use Cwd; use Win32::GUI; use Win32::GUI::Scintilla; my $VERSION = "1.0alpha1"; my $CurrentFile = ""; my $Directory = cwd; my %faces = ( 'times' => 'Times New Roman', 'mono' => 'Courier New', 'helv' => 'Lucida Console', 'lucida' => 'Lucida Console', 'other' => 'Comic Sans MS', 'size' => '10', 'size2' => '9', 'backcol'=> '#FFFFFF', ); my $PERL_KEYWORD = q{ NULL __FILE__ __LINE__ __PACKAGE__ __DATA__ __END__ AUTOLOAD BEGIN CORE DESTROY END EQ GE GT INIT LE LT NE CHECK abs accept alarm and atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot close closedir cmp connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eq eval exec exists exit exp fcntl fileno flock for foreach fork format formline ge getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst le length link listen local localtime lock log lstat lt m map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q qq qr quotemeta qu qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir s scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn while write x xor y }; my $Menu = Win32::GUI::MakeMenu( "&File" => "File", " > &New" => "FileNew", " > &Open..." => "FileOpen", " > -" => 0, " > &Save" => "FileSave", " > &Save As..." => "FileSaveAs", " > -" => 0, " > &Directory..." => "FileDirectory", " > -" => 0, " > E&xit" => "FileExit", "&Edit" => "Edit", " > &Undo" => "EditUndo", " > &Redo" => "EditRedo", " > -" => 0, " > Cu&t" => "EditCut", " > &Copy" => "EditCopy", " > &Paste" => "EditPaste", " > &Delete" => "EditClear", " > -" => 0, " > Select A&ll" => "EditSelectAll", " > -" => 0, " > &Find..." => "EditFind", "&Help" => "Help", " > &About..." => "HelpAbout", ); # main Window my $Window = new Win32::GUI::Window ( -name => "Window", -title => "Perl Editor", -pos => [100, 100], -size => [400, 400], -menu => $Menu, ) or die "new Window"; # Create Scintilla Edit Window # $Edit = new Win32::GUI::Scintilla ( # -parent => $Window, my $Editor = $Window->AddScintilla ( -name => "Editor", -pos => [0, 0], -size => [400, 400], -addexstyle => WS_EX_CLIENTEDGE, ) or die "new Edit"; # Init editor InitEditor(); # Create FindDlg window my $FindDlg = CreateFindDlg (); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Free FindDlg $FindDlg->CloseWindow(); sub InitEditor { # Set Perl Lexer $Editor->SetLexer(Win32::GUI::Scintilla::SCLEX_PERL); # Set Perl Keyword $Editor->SetKeyWords(0, $PERL_KEYWORD); # Folder ???? $Editor->SetProperty("fold", "1"); $Editor->SetProperty("tab.timmy.whinge.level", "1"); # Indenetation $Editor->SetIndentationGuides(1); $Editor->SetUseTabs(1); $Editor->SetTabWidth(3); $Editor->SetIndent(3); # Edge Mode $Editor->SetEdgeMode(Win32::GUI::Scintilla::EDGE_LINE); #Win32::GUI::Scintilla::EDGE_BACKGROUND $Editor->SetEdgeColumn(80); # Define margin # $Editor->SetMargins(0,0); $Editor->SetMarginTypeN(1, Win32::GUI::Scintilla::SC_MARGIN_NUMBER); $Editor->SetMarginWidthN(1, 25); $Editor->SetMarginTypeN(2, Win32::GUI::Scintilla::SC_MARGIN_SYMBOL); $Editor->SetMarginMaskN(2, Win32::GUI::Scintilla::SC_MASK_FOLDERS); $Editor->SetMarginSensitiveN(2, 1); $Editor->SetMarginWidthN(2, 12); # Define marker $Editor->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEREND, Win32::GUI::Scintilla::SC_MARK_BOXPLUSCONNECTED); $Editor->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEREND, '#FFFFFF'); $Editor->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEREND, '#000000'); $Editor->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPENMID, Win32::GUI::Scintilla::SC_MARK_BOXMINUSCONNECTED); $Editor->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPENMID, '#FFFFFF'); $Editor->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPENMID, '#000000'); $Editor->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERMIDTAIL, Win32::GUI::Scintilla::SC_MARK_TCORNER); $Editor->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERMIDTAIL, '#FFFFFF'); $Editor->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERMIDTAIL, '#000000'); $Editor->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERTAIL, Win32::GUI::Scintilla::SC_MARK_LCORNER); $Editor->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERTAIL, '#FFFFFF'); $Editor->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERTAIL, '#000000'); $Editor->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERSUB, Win32::GUI::Scintilla::SC_MARK_VLINE); $Editor->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERSUB, '#FFFFFF'); $Editor->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDERSUB, '#000000'); $Editor->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDER, Win32::GUI::Scintilla::SC_MARK_BOXPLUS); $Editor->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDER, '#FFFFFF'); $Editor->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDER, '#000000'); $Editor->MarkerDefine(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPEN, Win32::GUI::Scintilla::SC_MARK_BOXMINUS); $Editor->MarkerSetFore(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPEN, '#FFFFFF'); $Editor->MarkerSetBack(Win32::GUI::Scintilla::SC_MARKNUM_FOLDEROPEN, '#000000'); # Define Style $Editor->StyleClearAll(); # Global default styles for all languages $Editor->StyleSetSpec(Win32::GUI::Scintilla::STYLE_DEFAULT, "face:$faces{'mono'},size:$faces{'size'}"); $Editor->StyleSetSpec(Win32::GUI::Scintilla::STYLE_LINENUMBER, "back:#C0C0C0,face:$faces{mono}"); $Editor->StyleSetSpec(Win32::GUI::Scintilla::STYLE_CONTROLCHAR, "face:$faces{mono}"); $Editor->StyleSetSpec(Win32::GUI::Scintilla::STYLE_BRACELIGHT, "fore:#FFFFFF,back:#0000FF,bold"); $Editor->StyleSetSpec(Win32::GUI::Scintilla::STYLE_BRACEBAD, "fore:#000000,back:#FF0000,bold"); # White space $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_DEFAULT, "fore:#808080,face:$faces{'mono'}"); # Error $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_ERROR , "fore:#0000FF"); # Comment $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_COMMENTLINE, "fore:#007F00"); # POD: = at beginning of line $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_POD, "fore:#004000,back:#E0FFE0,eolfilled"); # Number $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_NUMBER, "fore:#007F7F"); # Keyword $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_WORD , "fore:#00007F,bold"); # Double quoted string $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING, "fore:#7F007F,face:$faces{'mono'},italic"); # Single quoted string $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_CHARACTER, "fore:#7F0000,face:$faces{'mono'},italic"); # Symbols / Punctuation. Currently not used by LexPerl. $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_PUNCTUATION, "fore:#00007F,bold"); # Preprocessor. Currently not used by LexPerl. $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_PREPROCESSOR, "fore:#00007F,bold"); # Operators $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_OPERATOR , "bold"); # Identifiers (functions, etc.) $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_IDENTIFIER , "fore:#000000"); # Scalars: $var $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_SCALAR, "fore:#000000,back:#FFE0E0"); # Array: @var $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_ARRAY, "fore:#000000,back:#FFFFE0"); # Hash: %var $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HASH, "fore:#000000,back:#FFE0FF"); # Symbol table: *var $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_SYMBOLTABLE, "fore:#000000,back:#E0E0E0"); # Regex: /re/ or m{re} $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_REGEX, "fore:#000000,back:#A0FFA0"); # Substitution: s/re/ore/ $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_REGSUBST, "fore:#000000,back:#F0E080"); # Long Quote (qq, qr, qw, qx) -- obsolete: replaced by qq, qx, qr, qw $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_LONGQUOTE, "fore:#FFFF00,back:#8080A0"); # Back Ticks $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_BACKTICKS, "fore:#FFFF00,back:#A08080"); # Data Section: __DATA__ or __END__ at beginning of line $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_DATASECTION, "#600000,back:#FFF0D8,eolfilled"); # Here-doc (delimiter) $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_DELIM, "fore:#000000,back:#DDD0DD"); # Here-doc (single quoted, q) $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_Q, "fore:#7F007F,back:#DDD0DD,eolfilled,notbold"); # Here-doc (double quoted, qq) $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_QQ, "fore:#7F007F,back:#DDD0DD,eolfilled,bold"); # Here-doc (back ticks, qx) $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_HERE_QX, "fore:#7F007F,back:#DDD0DD,eolfilled,italics"); # Single quoted string, generic $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_Q, "fore:#7F007F,notbold"); # qq = Double quoted string $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QQ, "fore:#7F007F,italic"); # qx = Back ticks $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QX, "fore:#FFFF00,back:#A08080"); # qr = Regex $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QR, "fore:#000000,back:#A0FFA0"); # qw = Array $Editor->StyleSetSpec (Win32::GUI::Scintilla::SCE_PL_STRING_QW, "fore:#000000,back:#FFFFE0"); } sub Editor_Notify { my (%evt) = @_; if ($evt{-code} == Win32::GUI::Scintilla::SCN_UPDATEUI) { # Update menu my $Sel = ($Editor->GetSelectionStart() != $Editor->GetSelectionEnd()); $Menu->{EditUndo}->Enabled($Editor->CanUndo()); $Menu->{EditRedo}->Enabled($Editor->CanRedo()); $Menu->{EditCut}->Enabled($Sel); $Menu->{EditCopy}->Enabled($Sel); $Menu->{EditPaste}->Enabled($Editor->CanPaste()); $Menu->{EditClear}->Enabled($Sel); # check for matching braces $Editor->BraceHighEvent(); } elsif ($evt{-code} == Win32::GUI::Scintilla::SCN_MARGINCLICK) { # Click on folder margin if ($evt{-margin} == 2) { # Manage Folder $Editor->FolderEvent(%evt); # caret visible $Editor->ScrollCaret(); } } } # Main window event handler sub Window_Terminate { return FileExit_Click(); } sub Window_Resize { if (defined $Window) { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Editor->Move (0, 0); $Editor->Resize ($width, $height); } } ####################################################################### # # File Menu # ####################################################################### sub FileNew_Click { $Editor->NewFile(); $CurrentFile = ""; } sub FileOpen_Click { my $file = Win32::GUI::GetOpenFileName( -owner => $Window, -title => "Open a text file", -filter => [ 'Perl script (*.pl)' => '*.pl', 'All files' => '*.*', ], -directory => $Directory, ); if ($file) { $Editor->LoadFile ($file); $CurrentFile = $file; } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetOpenFileName Error"); } } sub FileSave_Click { unless ($CurrentFile eq "") { my $ret = Win32::GUI::MessageBox (0, "Overwrite existing file ?", "Save", MB_ICONQUESTION | MB_YESNOCANCEL); if ($ret == 6) { $ret = $Editor->SaveFile ($CurrentFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveDocument ", "Save Error"); } } elsif ($ret == 7) { FileSaveAs_Click(); } } else { FileSaveAs_Click(); } } sub FileSaveAs_Click { my $ret = Win32::GUI::GetSaveFileName ( -title => "Save text file As", -filter => [ 'Perl script (*.pl)' => '*.pl', 'All files' => '*.*', ], -directory => $Directory, ); if ($ret) { $CurrentFile = $ret; $ret = $Editor->SaveFile ($CurrentFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveDocument ", "Save Error"); } } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetSaveFileName Error"); } } sub FileDirectory_Click { my $ret = Win32::GUI::BrowseForFolder ( -title => "Select default directory", -directory => $Directory, -folderonly => 1, ); $Directory = $ret if ($ret); } sub FileExit_Click { return -1 } ####################################################################### # # Edit Menu # ####################################################################### sub EditUndo_Click { $Editor->Undo(); } sub EditRedo_Click { $Editor->Redo(); } sub EditCut_Click { $Editor->Cut(); } sub EditCopy_Click { $Editor->Copy(); } sub EditPaste_Click { $Editor->Paste(); } sub EditSelectAll_Click { $Editor->SelectAll(); } sub EditClear_Click { $Editor->Clear(); } sub EditFind_Click { $FindDlg->Show(); } ####################################################################### # # Help Menu # ####################################################################### sub HelpAbout_Click { Win32::GUI::MessageBox( 0, "Perl Editor, version $VERSION\r\n". "Laurent ROCHER", "About...", MB_ICONINFORMATION | MB_OK, ); return 1; } ####################################################################### # # FindWindow # ####################################################################### sub CreateFindDlg { my $FindDlg = new Win32::GUI::Window( -name => "FindDlg", -title => "Find", -pos => [ 150, 150 ], -size => [ 270, 140 ], ); $FindDlg->AddLabel ( -name => "FindDlg_Label", -text => "Find what...", -pos => [10, 12], -size => [100, 13], ); $FindDlg->AddTextfield ( -name => "FindDlg_Text", -pos => [10, 30], -size => [150, 21], ); $FindDlg->AddCheckbox ( -name => "FindDlg_Case", -text => "Match case", -pos => [10, 50], -size => [100, 21], ); $FindDlg->AddCheckbox ( -name => "FindDlg_Word", -text => "Find Whole word only", -pos => [10, 70], -size => [100, 21], ); $FindDlg->AddCheckbox ( -name => "FindDlg_REGEX", -text => "Regular expression", -pos => [10, 90], -size => [75, 21], ); $FindDlg->AddButton ( -name => "FindDlg_Forward", -text => "&Forward", -pos => [180, 10], -size => [75 , 21], ); $FindDlg->AddButton ( -name => "FindDlg_Backware", -text => "&Backware", -pos => [180, 40], -size => [75 , 21], ); $FindDlg->AddButton ( -name => "FindDlg_Close", -text => "C&lose", -pos => [180, 70], -size => [75 , 21], ); return $FindDlg; } sub FindDlg_Forward_Click { my $text = $FindDlg->FindDlg_Text->Text(); my $flag = 0; $flag |= Win32::GUI::Scintilla::SCFIND_MATCHCASE if ($FindDlg->FindDlg_Case->Checked()); $flag |= Win32::GUI::Scintilla::SCFIND_WHOLEWORD if ($FindDlg->FindDlg_Word->Checked()); $flag |= Win32::GUI::Scintilla::SCFIND_REGEXP if ($FindDlg->FindDlg_REGEX->Checked()); if ($Editor->FindAndSelect ($text, $flag, 1, 1) == -1) { Win32::GUI::MessageBox($FindDlg, "Text not found", "Find..."); } 0; } sub FindDlg_Backware_Click { my $text = $FindDlg->FindDlg_Text->Text(); my $flag = 0; $flag |= Win32::GUI::Scintilla::SCFIND_MATCHCASE if ($FindDlg->FindDlg_Case->Checked()); $flag |= Win32::GUI::Scintilla::SCFIND_WHOLEWORD if ($FindDlg->FindDlg_Word->Checked()); $flag |= Win32::GUI::Scintilla::SCFIND_REGEXP if ($FindDlg->FindDlg_REGEX->Checked()); if ($Editor->FindAndSelect ($text, $flag, -1, 1) == -1) { Win32::GUI::MessageBox($FindDlg, "Text not found", "Find..."); } 0; } sub FindDlg_Close_Click { $FindDlg->Hide(); 0; } sub FindDlg_Terminate { return FindDlg_Close_Click(); } |
From: jw <jw...@us...> - 2005-11-01 10:34:16
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Scintilla/Samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23550/Samples Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-Scintilla/Samples added to the repository |
From: jw <jw...@us...> - 2005-11-01 10:34:16
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Scintilla/Include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23550/Include Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-Scintilla/Include added to the repository |