[Lazarus] Gtk3 - Set entry placeholder
zeljko
zeljko at holobit.net
Tue Jan 6 09:45:20 CET 2015
On 01/05/2015 08:37 PM, Krzysztof wrote:
> Hi,
>
> I'm testing Gtk3 (I know that it is in alpha stage). I have latest
> lazarus from svn (1.3)
>
> When using low level Gtk3 api then this code work fine:
>
> uses
> {$IFDEF UNIX}{$IFDEF UseCThreads}
> cthreads,
> {$ENDIF}{$ENDIF}
> Interfaces, // this includes the LCL widgetset
> LazGtk3, LazGObject2;
>
> {$R *.res}
>
> var
> window: PGtkWindow;
> entry1, entry2: PGtkWidget;
> vbox: PGtkWidget;
>
> begin
> gtk_init (@argc, @argv);
>
> window := gtk_window_new (GTK_WINDOW_TOPLEVEL);
> gtk_window_set_title (window, 'Window');
>
> g_signal_connect_data(window, 'destroy', TGCallback(@gtk_main_quit),
> nil, nil, 0);
>
> vbox := gtk_box_new(GTK_ORIENTATION_VERTICAL, 2);
> gtk_container_add (PGtkContainer(window), vbox);
>
> entry1 := gtk_entry_new ();
> gtk_entry_set_text(PGtkEntry(entry1), 'Hello');
>
> entry2 := gtk_entry_new ();
> gtk_entry_set_placeholder_text(PGtkEntry(entry2), '<Test>');
>
> gtk_box_pack_start(PGtkBox(vbox), entry1, True, True, 0);
> gtk_box_pack_start(PGtkBox(vbox), entry2, True, True, 0);
>
> gtk_widget_show_all (window);
>
> gtk_main ();
> end.
>
> But if I create LCL application, then change LCLWidgetType to Gtk3 and
> call this:
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> gtk_entry_set_placeholder_text(Edit1.Handle), PChar('Test'));
That's because Edit1.Handle is not PGtkEntry, but TGtk3Entry, so this
code should work (you must include gtk3widgets unit to get it work):
gtk_entry_set_placeholder_text(PGtkEntry(TGtk3Edit(Edit1.Handle).Widget), PChar('Test'));
or
var
AEntry: PGtkEntry;
begin
AEntry := PGtkEntry(TGtk3Edit(Edit1.Handle).Widget);
gtk_entry_set_placeholder_text(AEntry, PChar('Test'));
end;
zeljko
More information about the Lazarus
mailing list