ex6.pp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. program ex6;
  2. {$mode objfpc}
  3. uses
  4. glib,gtk;
  5. Type
  6. TButtonSignalState = Record
  7. Obj : PgtkObject;
  8. SignalID : longint;
  9. Disable : Boolean;
  10. end;
  11. PButtonSignalState = ^TButtonSignalState;
  12. procedure destroy(widget : pGtkWidget ; data: pgpointer ); cdecl;
  13. begin
  14. gtk_main_quit();
  15. end;
  16. procedure disablesignal(widget : pGtkWidget ; data: pgpointer ); cdecl;
  17. begin
  18. With PButtonSignalState(Data)^ do
  19. begin
  20. If Disable then
  21. gtk_signal_handler_block(Obj,SignalID)
  22. else
  23. gtk_signal_handler_unblock(Obj,SignalID);
  24. disable:=Not disable;
  25. end;
  26. end;
  27. var
  28. window : PGtkWidget;
  29. quitbutton : PGtkWidget;
  30. disablebutton : PGTKWidget;
  31. windowbox : PGTKWidget;
  32. quitsignal : guint;
  33. QuitState : TButtonSignalState;
  34. begin
  35. gtk_init (@argc, @argv);
  36. window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
  37. quitbutton := gtk_button_new_with_label('Quit program');
  38. disablebutton := gtk_button_new_with_label('Disable button');
  39. windowbox:=gtk_vbox_new(TRUE,10);
  40. gtk_box_pack_start(GTK_BOX(windowbox),disablebutton,True,false,0);
  41. gtk_box_pack_start(GTK_BOX(windowbox),quitbutton,True,false,0);
  42. gtk_container_set_border_width(GTK_CONTAINER(Window),10);
  43. gtk_container_add(GTK_Container(window),windowbox);
  44. gtk_signal_connect (PGTKOBJECT (window), 'destroy',
  45. GTK_SIGNAL_FUNC (@destroy), NULL);
  46. With QuitState do
  47. begin
  48. Obj:=PGTKObject(QuitButton);
  49. SignalID:=gtk_signal_connect_object(Obj,'clicked',
  50. GTK_SIGNAL_FUNC(@gtk_widget_destroy),
  51. PGTKOBJECT(window));
  52. Disable:=True;
  53. end;
  54. gtk_signal_connect(PGTKOBJECT(disablebutton),'clicked',
  55. GTK_SIGNAL_FUNC(@disablesignal),@QuitState);
  56. gtk_widget_show (quitbutton);
  57. gtk_widget_show (disablebutton);
  58. gtk_widget_show (windowbox);
  59. gtk_widget_show (window);
  60. gtk_main ();
  61. end.