1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- program ex6;
- {$mode objfpc}
- uses
- glib,gtk;
- Type
- TButtonSignalState = Record
- Obj : PgtkObject;
- SignalID : longint;
- Disable : Boolean;
- end;
- PButtonSignalState = ^TButtonSignalState;
-
- procedure destroy(widget : pGtkWidget ; data: pgpointer ); cdecl;
- begin
- gtk_main_quit();
- end;
- procedure disablesignal(widget : pGtkWidget ; data: pgpointer ); cdecl;
- begin
- With PButtonSignalState(Data)^ do
- begin
- If Disable then
- gtk_signal_handler_block(Obj,SignalID)
- else
- gtk_signal_handler_unblock(Obj,SignalID);
- disable:=Not disable;
- end;
- end;
- var
- window : PGtkWidget;
- quitbutton : PGtkWidget;
- disablebutton : PGTKWidget;
- windowbox : PGTKWidget;
- quitsignal : guint;
- QuitState : TButtonSignalState;
-
- begin
- gtk_init (@argc, @argv);
- window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
- quitbutton := gtk_button_new_with_label('Quit program');
- disablebutton := gtk_button_new_with_label('Disable button');
- windowbox:=gtk_vbox_new(TRUE,10);
- gtk_box_pack_start(GTK_BOX(windowbox),disablebutton,True,false,0);
- gtk_box_pack_start(GTK_BOX(windowbox),quitbutton,True,false,0);
- gtk_container_set_border_width(GTK_CONTAINER(Window),10);
- gtk_container_add(GTK_Container(window),windowbox);
- gtk_signal_connect (PGTKOBJECT (window), 'destroy',
- GTK_SIGNAL_FUNC (@destroy), NULL);
- With QuitState do
- begin
- Obj:=PGTKObject(QuitButton);
- SignalID:=gtk_signal_connect_object(Obj,'clicked',
- GTK_SIGNAL_FUNC(@gtk_widget_destroy),
- PGTKOBJECT(window));
- Disable:=True;
- end;
- gtk_signal_connect(PGTKOBJECT(disablebutton),'clicked',
- GTK_SIGNAL_FUNC(@disablesignal),@QuitState);
- gtk_widget_show (quitbutton);
- gtk_widget_show (disablebutton);
- gtk_widget_show (windowbox);
- gtk_widget_show (window);
- gtk_main ();
- end.
|