pixmap.pp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. {
  2. This file extracted from the GTK tutorial.
  3. pixmap.c
  4. Converted from C to Pascal by Frank Loemker
  5. <[email protected]>
  6. }
  7. program pixmap;
  8. uses
  9. glib,gdk,gtk;
  10. { XPM data of Open-File icon }
  11. const
  12. xpm_data:array[0..19] of pchar =
  13. ('16 16 3 1',
  14. ' c None',
  15. '. c #000000000000',
  16. 'X c #FFFFFFFFFFFF',
  17. ' ',
  18. ' ...... ',
  19. ' .XXX.X. ',
  20. ' .XXX.XX. ',
  21. ' .XXX.XXX. ',
  22. ' .XXX..... ',
  23. ' .XXXXXXX. ',
  24. ' .XXXXXXX. ',
  25. ' .XXXXXXX. ',
  26. ' .XXXXXXX. ',
  27. ' .XXXXXXX. ',
  28. ' .XXXXXXX. ',
  29. ' .XXXXXXX. ',
  30. ' ......... ',
  31. ' ',
  32. ' ');
  33. { when invoked (via signal delete_event), terminates the application. }
  34. procedure close_application(widget : pGtkWidget ; event: pGdkEvent ; data: pgpointer); cdecl;
  35. begin
  36. gtk_main_quit();
  37. end;
  38. { is invoked when the button is clicked. It just prints a message. }
  39. procedure button_clicked(widget : pGtkWidget ; data: pgpointer); cdecl;
  40. begin
  41. writeln ('button clicked');
  42. end;
  43. { GtkWidget is the storage type for widgets }
  44. var window, pixmapwid, button : pGtkWidget;
  45. thepixmap : pGdkPixmap;
  46. mask : pGdkBitmap;
  47. style : pGtkStyle;
  48. begin
  49. { create the main window, and attach delete_event signal to terminating
  50. the application }
  51. gtk_init( @argc, @argv );
  52. gtk_rc_init;
  53. window := gtk_window_new( GTK_WINDOW_TOPLEVEL );
  54. gtk_signal_connect (pGTKOBJECT (window), 'delete_event',
  55. GTK_SIGNAL_FUNC (@close_application), NIL );
  56. gtk_container_set_border_width( pGTKCONTAINER (window), 10 );
  57. gtk_widget_show( window );
  58. { now for the pixmap from gdk }
  59. style := gtk_widget_get_style( window );
  60. thepixmap := gdk_pixmap_create_from_xpm_d( window^.window, @mask,
  61. @style^.bg[GTK_STATE_NORMAL],
  62. ppgchar (xpm_data ));
  63. { a pixmap widget to contain the pixmap }
  64. pixmapwid := gtk_pixmap_new( thepixmap, mask );
  65. gtk_widget_show( pixmapwid );
  66. { a button to contain the pixmap widget }
  67. button := gtk_button_new();
  68. gtk_container_add( pGTKCONTAINER(button), pixmapwid );
  69. gtk_container_add( pGTKCONTAINER(window), button );
  70. gtk_widget_show( button );
  71. gtk_signal_connect (pGTKOBJECT(button), 'clicked',
  72. GTK_SIGNAL_FUNC(@button_clicked), NIL );
  73. { show the window }
  74. gtk_main ();
  75. end.