Cita:
Empezado por Casimiro Notevi
¿Y para Linux?, ¿se puede?
|
Casimiro, aquí encontré un programita para linux, dos botones y dos cajas de texto creo
Código Delphi
[-]
program temperature;
{$mode objfpc}
uses
glib, gdk, gtk, sysutils;
Type
TMainWindow = Record
Window : pGtkWindow; hBox, fahBox, celBox, celButton, fahButton, celEntry, fahEntry, celSlider, fahSlider, celLabel, fahLabel : pGtkWidget; celAdjust, fahAdjust : pGtkObject; end;
PMainWindow = ^TMainWindow;
procedure quit_app (widget: pGtkWidget; Window: PMainWindow); cdecl;
begin
dispose(Window);
gtk_main_quit;
end;
procedure scale_set_default_values( scale : pGtkScale);
begin
gtk_range_set_update_policy (GTK_RANGE (scale),
GTK_UPDATE_CONTINUOUS);
gtk_scale_set_digits (scale, 1);
gtk_scale_set_value_pos (scale, GTK_POS_BOTTOM);
gtk_scale_set_draw_value (scale, TRUE);
end;
function FtoC(tempF: float):float;
begin
Result := (tempF - 32) * (5/9);
end;
function CtoF(tempC: float): float;
begin
Result := (tempC * (9/5) + 32);
end;
procedure SetSliderValue ( slider : pGtkAdjustment; value : float);
begin
if (value < 0.0) and (value > 100.0) then
value := 0.0;
gtk_adjustment_set_value(slider, value);
end;
procedure DisplayTemp( temperature : float; entry : pGtkEntry);
begin
gtk_entry_set_text(entry, pchar(Format('%.1f', [temperature])));
end;
procedure buttonCtoF(widget: pGtkWidget; Window: PMainWindow); cdecl;
var
textValue: pgchar;
tempC,
tempF: float;
begin
textValue := gtk_entry_get_text(pGtkEntry(Window^.celEntry));
if textValue <>'' then
begin
try
tempC := StrToFloat(textValue);
except
on E:EConvertError do
tempC := 0.0;
end;
tempF := CtoF(tempC);
DisplayTemp(tempF, pGtkEntry(Window^.fahEntry));
SetSliderValue(pGtkAdjustment(Window^.fahAdjust), tempF);
end;
end;
procedure buttonFtoC(widget: pGtkWidget; Window: PMainWindow); cdecl;
var
textValue: pgchar;
tempC,
tempF: float;
begin
textValue := gtk_entry_get_text(pGtkEntry(Window^.fahEntry));
if textValue <>'' then
begin
try
tempF := StrToFloat(textValue);
except
on E:EConvertError do
tempF := 0.0;
end;
tempC := FtoC(tempF);
DisplayTemp(tempC, pGtkEntry(Window^.celEntry));
SetSliderValue(pGtkAdjustment(Window^.celAdjust), tempC);
end;
end;
procedure FsliderChanged( widget : pGtkWidget; Window : PMainWindow); cdecl;
begin
DisplayTemp(pGtkAdjustment(Window^.fahAdjust)^.value,
pGtkEntry(Window^.fahEntry));
end;
procedure CsliderChanged( widget : pGtkWidget; Window : PMainWindow); cdecl;
begin
DisplayTemp(pGtkAdjustment(Window^.celAdjust)^.value,
pGtkEntry(Window^.celEntry));
end;
function create_main_window : PMainWindow;
begin
Result := New(PMainWindow);
with Result^ do
begin
Window := pGtkWindow(gtk_window_new(GTK_WINDOW_TOPLEVEL));
gtk_window_set_title(Window, 'Temperature Conversion');
gtk_signal_connect(pGtkObject(Window), 'destroy',
GTK_SIGNAL_FUNC (@quit_app), Result);
hBox := gtk_hbox_new(false, 10);
gtk_container_add(GTK_CONTAINER(Window), hBox);
fahAdjust := gtk_adjustment_new(0.0, 0.0, 101.0, 0.5, 10.0, 1.0);
fahSlider := gtk_vscale_new(GTK_ADJUSTMENT(fahAdjust));
scale_set_default_values(GTK_SCALE(fahSlider));
gtk_signal_connect(GTK_OBJECT(fahAdjust), 'value_changed',
GTK_SIGNAL_FUNC(@FsliderChanged), Result);
gtk_box_pack_start(pGtkBox(hBox), pGtkWidget(fahSlider),
False, False, 0);
fahBox := gtk_vbox_new(false, 10);
gtk_container_add(GTK_CONTAINER(hBox), fahBox);
fahLabel := gtk_label_new('Fahrenheit');
gtk_box_pack_start(pGtkBox(fahBox), pGtkWidget(fahLabel),
False, False, 0);
fahEntry := gtk_entry_new();
gtk_box_pack_start(pGtkBox(fahBox), pGtkWidget(fahEntry),
False, False, 0);
fahButton := gtk_button_new_with_label('--F to C-->');
gtk_signal_connect(pGtkObject(fahButton), 'clicked',
GTK_SIGNAL_FUNC(@buttonFtoC), Result);
gtk_box_pack_start(pGtkBox(fahBox), pGtkWidget(fahButton),
False, False, 5);
celBox := gtk_vbox_new(False, 10);
gtk_container_add(GTK_CONTAINER(hBox), celBox);
celLabel := gtk_label_new('Celsius');
celEntry := gtk_entry_new();
gtk_box_pack_start(pGtkBox(celBox), pGtkWidget(celLabel),
False, False, 0);
gtk_box_pack_start(pGtkBox(celBox), pGtkWidget(celEntry),
False, False, 0);
celButton := gtk_button_new_with_label('<--C to F--');
gtk_signal_connect(pGtkObject(celButton), 'clicked',
GTK_SIGNAL_FUNC(@buttonCtoF), Result);
gtk_box_pack_start(pGtkBox(celBox), pGtkWidget(celButton),
False, False, 5);
celAdjust := gtk_adjustment_new(0.0, 0.0, 101.0, 0.5, 10.0, 1.0);
celSlider := gtk_vscale_new(GTK_ADJUSTMENT(celAdjust));
scale_set_default_values(GTK_SCALE(celSlider));
gtk_signal_connect(GTK_OBJECT(celAdjust), 'value_changed',
GTK_SIGNAL_FUNC(@CsliderChanged), Result);
gtk_box_pack_start(pGtkBox(hBox), pGtkWidget(celSlider),
False, False, 0);
end;
end;
var
MainWindow : PMainWindow;
begin
gtk_init(@argc, @argv);
MainWindow:=create_main_window;
gtk_widget_show_all(PGtkWidget(MainWindow^.Window));
gtk_main();
end.
Saludos