Thats exactly what I looked for (shit I even knew this some years ago) blessings
Am 28.06.2013 21:21, schrieb Mark Dootson: > Hi, > > I think your solution is to use the newFromXPM methods. > > my $bitmap = Wx::Bitmap->newFromXPM( \@xpmdata ); > my $icon = Wx::Icon->newFromXPM( \@xpmdata ); > > @xpmdata is just an array of xpm strings - so one array element per line if > the xmp data is from a file. > > Given some inline xpm data such as > > my $bitmap1 = <<EOB > .... > EOB > > > The you would have a choice of doing > > A) > my @xpmdata = split(/\n/, $bitmap1); > my $bitmap = Wx::Bitmap->newFromXPM( \@xpmdata ); > > or > > B) > open my $fh, '<', \$bitmap1; > my $bitmap = Wx::Bitmap->new( > Wx::Image->new($fh, wxBITMAP_TYPE_XPM) > ); > close( $fh ); > > > Using method B) you can imagine creating a module dynamically that bundles a > any number of PNG files together in its __DATA__ section and records the name, > size and offset of each PNG in the main body of the module code. > It would be quite simple I think to add a GetBitmap method to this module that > would return bitmap objects by name. > > > Hope some of it helps > > Regards > > Mark > > > On 28/06/2013 20:16, herbert breunung wrote: >> Thanks so much for taking the time. >> The real reason for this rather silly test was to fill xpm >> bitmaps with loadfile method. this was a first test to look if there is >> something coming out of the pipe. do i have to write a handler for that, >> because that would give Kephra a total independence of config files, >> if it could have also inline icons. >> >> thanks a lot. >> herbert >> >> >>> Hi Herbert, >>> >>> On 26/06/2013 18:11, herbert breunung wrote: >>>> greetings comrads >>>> I have seen the XRC custom example in Wx::Demo and did >>> .... >>>> Wx::MemoryFSHandler::AddTextFile( 'file.xpm', <<'EOB' ); >>> .... >>>> my $ed = Wx::TextCtrl->new($frame, -1,''); >>>> $ed->LoadFile('memory:file.xpm'); >>>> >>>> but i get just error also loading into the bitmap doesn't work. >>>> Any Suggestions? >>>> >>>> Thanks a lot >>>> Herbert aka lichtkind >>>> >>> >>> I had to look at the wxWidgets source to figure out what is happening here. >>> >>> It turns out that you cannot use the name of a memory file anywhere that you >>> can use a filename. Only some specific methods accept the name of a 'memory' >>> file. Internally, only some 'Load' methods use wxFileSystem and streams. For >>> these methods, passing the name of a 'memory' file will work. In addition to >>> the XRC method in Wx::Demo, Wx::HtmlWindow->LoadPage() will accept a >>> 'memory' >>> file. >>> >>> Other methods, such as Wx::TextCtrl->LoadFile, are implemented as thin >>> wrappers around the operating system file open / read functions. So in these >>> cases 'memory:file.xpm' is not going to work. >>> >>> I don't see anywhere in the documentation that you can tell which methods >>> use >>> filestreams though :( >>> >>> For information, I have attached an example of how you can get a file handle >>> to a memory file and read the content. It all looks pointless though and >>> there >>> seems multiple better ways to structure this in Perl. >>> >>> Hope it helps >>> >>> Mark >>> >>> #--------------------------------------------------------------------- >>> #/usr/bin/perl >>> >>> package MyFrame; >>> use strict; >>> use warnings; >>> use Wx qw( :textctrl :sizer :panel :window); >>> use Wx::FS; >>> use base qw( Wx::Frame ); >>> >>> sub new { >>> my $class = shift; >>> my $self = $class->SUPER::new( @_ ); >>> my $mainpanel = Wx::Panel->new($self, -1, [-1,-1], [-1,-1], >>> wxTAB_TRAVERSAL|wxBORDER_NONE); >>> my $text = Wx::TextCtrl->new($mainpanel, -1, "", [-1,-1],[-1,-1]); >>> >>> # Fairly pointless use of Virtual File System directly >>> >>> # Create Virtual File System >>> { >>> my $content = 'The quick brown fox jumped over the lazy dog'; >>> Wx::FileSystem::AddHandler( Wx::MemoryFSHandler->new ); >>> Wx::MemoryFSHandler::AddTextFile( 'sample.txt', $content ); >>> } >>> >>> # Get file content from virtual filesystem >>> { >>> my $fs = Wx::FileSystem->new; >>> my $mfile = $fs->OpenFile('memory:sample.txt'); >>> my $fh = $mfile->GetStream; >>> my $textcontent = ''; >>> while(<$fh>) { >>> $textcontent .= $_; >>> } >>> $text->ChangeValue($textcontent); >>> } >>> >>> # Clean up VS >>> { >>> Wx::MemoryFSHandler::RemoveFile( 'sample.txt' ); >>> } >>> >>> my $panelsz = Wx::BoxSizer->new(wxVERTICAL); >>> my $framesz = Wx::BoxSizer->new(wxVERTICAL); >>> >>> $panelsz->Add($text, 1, wxEXPAND|wxALL, 0); >>> $mainpanel->SetSizer($panelsz); >>> $framesz->Add($mainpanel, 1, wxEXPAND|wxALL, 0); >>> $self->SetSizer($framesz); >>> >>> $self->Center; >>> return $self; >>> } >>> >>> package MyApp; >>> use strict; >>> use warnings; >>> use Wx; >>> use Wx::FS; >>> use base qw( Wx::App ); >>> >>> sub OnInit { >>> my $self = shift; >>> my $win = MyFrame->new(undef, -1, 'Wx::FS Test'); >>> $self->SetTopWindow($win); >>> $win->Show(1); >>> return 1; >>> } >>> >>> package main; >>> use strict; >>> use warnings; >>> >>> my $app = MyApp->new; >>> $app->MainLoop; >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >> > >