diff --git a/impostazioniform.lfm b/impostazioniform.lfm new file mode 100644 index 0000000..f152378 --- /dev/null +++ b/impostazioniform.lfm @@ -0,0 +1,199 @@ +object Impostazioni: TImpostazioni + Left = 503 + Height = 449 + Top = 250 + Width = 621 + BorderStyle = bsSingle + Caption = 'Impostazioni' + ClientHeight = 449 + ClientWidth = 621 + Color = 3288618 + Position = poOwnerFormCenter + LCLVersion = '4.6.0.0' + OnClick = FormClick + OnCreate = FormCreate + OnPaint = FormPaint + OnShow = FormShow + object CordinateGroupBox: TGroupBox + AnchorSideLeft.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 10 + Height = 168 + Top = 8 + Width = 601 + Anchors = [akTop, akLeft, akRight] + BorderSpacing.Around = 10 + Caption = 'Cordinate' + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousSpaceResize + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 4 + ClientHeight = 138 + ClientWidth = 595 + Font.Color = clWhite + ParentBackground = False + ParentFont = False + TabOrder = 0 + object Label1: TLabel + Left = 0 + Height = 31 + Top = 54 + Width = 150 + Alignment = taCenter + Caption = 'Latitudine' + Font.Color = clWhite + Layout = tlCenter + ParentFont = False + end + object LatitudineEdit: TFloatSpinEdit + Left = 150 + Height = 31 + Top = 54 + Width = 125 + MaxValue = 90 + MinValue = -90 + ParentFont = False + TabOrder = 0 + end + object Label2: TLabel + Left = 275 + Height = 31 + Top = 54 + Width = 166 + Alignment = taCenter + Caption = 'Longitudine' + Layout = tlCenter + end + object LongitudineEdit: TFloatSpinEdit + Left = 441 + Height = 31 + Top = 54 + Width = 124 + BorderSpacing.Right = 30 + MaxValue = 180 + MinValue = -180 + ParentFont = False + TabOrder = 1 + OnChange = LongitudineEditChange + end + end + object VarieGroupBox: TGroupBox + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = CordinateGroupBox + AnchorSideTop.Side = asrBottom + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 10 + Height = 206 + Top = 186 + Width = 601 + Anchors = [akTop, akLeft, akRight, akBottom] + BorderSpacing.Around = 10 + Caption = 'Varie' + ChildSizing.EnlargeHorizontal = crsHomogenousChildResize + ChildSizing.EnlargeVertical = crsHomogenousSpaceResize + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 2 + ClientHeight = 176 + ClientWidth = 595 + Font.Color = clWhite + ParentBackground = False + ParentFont = False + TabOrder = 1 + object Label3: TLabel + Left = 20 + Height = 31 + Top = 22 + Width = 394 + Caption = 'Orario Simulazione Predefinito' + Font.Color = clWhite + ParentFont = False + end + object OraSimulazioneEdit: TSpinEdit + Left = 416 + Height = 31 + Top = 22 + Width = 149 + MaxValue = 23 + ParentFont = False + TabOrder = 0 + Value = 21 + end + object Label4: TLabel + Left = 20 + Height = 28 + Top = 75 + Width = 394 + Caption = 'HTTPS (OpenSSL deve essere installata nel pc)' + Font.Color = clWhite + ParentFont = False + end + object CheckBox1: TCheckBox + Left = 416 + Height = 28 + Top = 75 + Width = 149 + Caption = 'Abilitato' + Color = 3288618 + Font.Color = clWhite + ParentColor = False + ParentFont = False + TabOrder = 1 + OnChange = CheckBox1Change + end + object Label5: TLabel + Left = 20 + Height = 30 + Top = 124 + Width = 394 + BorderSpacing.Left = 20 + Caption = 'Lingua' + Font.Color = clWhite + ParentFont = False + end + object LanguageBox: TComboBox + Left = 416 + Height = 30 + Top = 124 + Width = 149 + BorderSpacing.Left = 2 + BorderSpacing.Right = 30 + ItemHeight = 22 + Items.Strings = ( + 'Italiano' + '' + ) + ParentFont = False + TabOrder = 2 + Text = 'Italiano' + end + end + object CancelButton: TButton + Left = 384 + Height = 39 + Top = 400 + Width = 106 + Caption = 'Annulla' + TabOrder = 2 + OnClick = CancelButtonClick + end + object SaveButton: TButton + Left = 504 + Height = 39 + Top = 400 + Width = 106 + Caption = 'Salva' + TabOrder = 3 + OnClick = SaveButtonClick + end + object ResetButton: TButton + Left = 10 + Height = 39 + Top = 400 + Width = 106 + Caption = 'Reset' + TabOrder = 4 + OnClick = ResetButtonClick + end +end diff --git a/impostazioniform.pas b/impostazioniform.pas new file mode 100644 index 0000000..2199a3b --- /dev/null +++ b/impostazioniform.pas @@ -0,0 +1,136 @@ +unit ImpostazioniForm; + +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, StdCtrls, + Spin, settingsutils; + + + + type + + + { TImpostazioni } + + TImpostazioni = class(TForm) + CancelButton: TButton; + SaveButton: TButton; + ResetButton: TButton; + CheckBox1: TCheckBox; + LanguageBox: TComboBox; + LatitudineEdit: TFloatSpinEdit; + LongitudineEdit: TFloatSpinEdit; + CordinateGroupBox: TGroupBox; + VarieGroupBox: TGroupBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + Label5: TLabel; + OraSimulazioneEdit: TSpinEdit; + procedure CancelButtonClick(Sender: TObject); + procedure CheckBox1Change(Sender: TObject); + procedure SaveButtonClick(Sender: TObject); + procedure ResetButtonClick(Sender: TObject); + procedure FormClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormPaint(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure LongitudineEditChange(Sender: TObject); + procedure OKButtonClick(Sender: TObject); + + + private + + public + + + end; + +var + Impostazioni: TImpostazioni; + ImpostazioniDati: TImpostazioniDati; +implementation + +{$R *.lfm} + +{ TImpostazioni } + +procedure TImpostazioni.FormCreate(Sender: TObject); + +begin + {$ifdef windows} + CordinateGroupBox.Caption:=''; + VarieGroupBox.Caption:=''; + + {$endif} +end; + +procedure TImpostazioni.FormPaint(Sender: TObject); +begin + {$ifdef windows} + + {$endif} +end; + +procedure TImpostazioni.FormShow(Sender: TObject); +begin + Impostazioni.ResetButtonClick(nil); +end; + +procedure TImpostazioni.LongitudineEditChange(Sender: TObject); +begin + +end; + +procedure TImpostazioni.OKButtonClick(Sender: TObject); +begin + +end; + +procedure TImpostazioni.SaveButtonClick(Sender: TObject); +begin + impostazionidati.Latitudine:=LatitudineEdit.Value; + impostazionidati.Longitudine:=LongitudineEdit.Value; + impostazionidati.OraSimulazione:=OraSimulazioneEdit.Value; + if LanguageBox.SelText='' then impostazionidati.LinguaApp:=LanguageBox.Text + else impostazionidati.LinguaApp:=LanguageBox.SelText; + + impostazionidati.httpsIsEnabled:=CheckBox1.Checked; + +ScriviImpostazioni(impostazionidati); + +Impostazioni.Close; + +end; + +procedure TImpostazioni.ResetButtonClick(Sender: TObject); +begin + ImpostazioniDati:= LeggiImpostazioni(); + LatitudineEdit.Value:=ImpostazioniDati.Latitudine; + LongitudineEdit.Value:=ImpostazioniDati.Longitudine; + OraSimulazioneEdit.Value:=ImpostazioniDati.OraSimulazione; + CheckBox1.Checked:=impostazionidati.httpsIsEnabled; + LanguageBox.Text:=impostazionidati.LinguaApp; +end; + +procedure TImpostazioni.CancelButtonClick(Sender: TObject); +begin + Impostazioni.Close; +end; + +procedure TImpostazioni.CheckBox1Change(Sender: TObject); +begin + if CheckBox1.Checked then CheckBox1.Caption:='Abilitato' else CheckBox1.Caption:='Disabilitato'; +end; + +procedure TImpostazioni.FormClick(Sender: TObject); +begin + +end; + +end. + diff --git a/meteo_frame.lfm b/meteo_frame.lfm new file mode 100644 index 0000000..8cbc2d6 --- /dev/null +++ b/meteo_frame.lfm @@ -0,0 +1,467 @@ +object MeteoView: TMeteoView + Left = 0 + Height = 435 + Top = 0 + Width = 767 + ClientHeight = 435 + ClientWidth = 767 + Font.Color = clWhite + LCLVersion = '4.4.0.0' + ParentFont = False + TabOrder = 0 + OnResize = FrameResize + DesignLeft = 273 + DesignTop = 10 + object CondizioniMeteoLabel: TLabel + Left = 0 + Height = 66 + Hint = 'Fonte Previsioni: OpenMeteo.org' + Top = 43 + Width = 767 + Align = alTop + Alignment = taCenter + BorderSpacing.Top = 43 + Caption = 'Sereno' + Font.Color = clWhite + Font.Height = -48 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + end + object Label3: TLabel + AnchorSideLeft.Control = Owner + AnchorSideLeft.Side = asrCenter + Left = 357 + Height = 22 + Top = 16 + Width = 52 + Caption = 'Di sera' + Color = clWhite + ParentColor = False + end + object SpeedButton1: TSpeedButton + AnchorSideLeft.Control = Owner + AnchorSideTop.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Control = Owner + AnchorSideBottom.Side = asrBottom + Left = 10 + Height = 45 + Hint = 'Grafici Meteo' + Top = 10 + Width = 41 + BorderSpacing.Left = 10 + BorderSpacing.Top = 10 + BorderSpacing.Right = 10 + BorderSpacing.Bottom = 10 + Glyph.Data = { + 36090000424D3609000000000000360000002800000018000000180000000100 + 2000000000000009000064000000640000000000000000000000FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF009B9B9BEC999999FF999999FF999999FF999999FF999999FF9999 + 99FF999999FF999999FF999999FF999999FF999999FF999999FF999999FF9999 + 99FF999999FF999999FF9B9B9BECFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFDADADAFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEB + EBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEBEBFFEBEB + EBFFEBEBEBFFDADADAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFF6A6A6AFFECECECFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFA1A1A1FF939393FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFF6F6F6FF5E5E5EFFE1E1E1FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFB2B2B2FF828282FFFFFFFFFF9A9A + 9AFF9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFBFBFBFF656565FFB0B0B0FF5E5E + 5EFF5C5C5CFFE4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFC2C2C2FF4D4D4DFFBBBB + BBFFADADADFF868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFEFEFEFFBDBDBDFFFEFE + FEFFF9F9F9FF636363FFD4D4D4FFBDBDBDFF5F5F5FFFDDDDDDFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFC1C1C1FF585858FF6A6A6AFFAFAFAFFF626262FFEEEEEEFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFEFEFEFFBABABAFFF8F8F8FFFFFFFFFFA9A9A9FF737373FFF9F9 + F9FFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFF8E8E8EFFBABA + BAFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBB + FEFFFFFFFFFFEAEAEAFF999999FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00999999FFEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0203 + FAFF3131FBFF9595F0FF97979BFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008080A8FFA1A1E3FFADADEFFFADADEFFFADADEFFFADADEFFFADAD + EFFFADADEFFFADADEFFFADADEFFFADADEFFFADADEFFFADADEFFFADADEFFF0203 + FAFF0203FAFF0203FAFF1516EEFF0202FA6F0000FF0BFFFFFF00FFFFFF00FFFF + FF00FFFFFF000D0EF3FE0203FAFF0203FAFF0203FAFF0203FAFF0203FAFF0203 + FAFF0203FAFF0203FAFF0203FAFF0203FAFF0203FAFF0203FAFF0203FAFF0203 + FAFF0203FAFF0203FAFF0203FAFF0203FAFF0204FAD70000F71EFFFFFF00FFFF + FF00FFFFFF000000F9290404FB440404FB440404FB440404FB440404FB440404 + FB440404FB440404FB440404FB440404FB440404FB440404FB440404FB440203 + FAFF0203FAFF0203FAFF0203FADF0202FA6F0000FF0BFFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000203 + FAFF0202FAD00303FA5E0000FF04FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000404 + FB45FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 + } + OnClick = SpeedButton1Click + end + object EventiPanel: TPanel + AnchorSideLeft.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + AnchorSideBottom.Side = asrBottom + Left = 0 + Height = 131 + Hint = 'Eventi presi dai tabulati NASA, potrebbero differire se non ti trovi in USA' + Top = 288 + Width = 767 + Anchors = [akTop, akLeft, akRight, akBottom] + BevelOuter = bvNone + ChildSizing.LeftRightSpacing = 10 + ChildSizing.HorizontalSpacing = 20 + ChildSizing.EnlargeVertical = crsHomogenousSpaceResize + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 131 + ClientWidth = 767 + ParentBackground = False + TabOrder = 0 + object Evento1Label: TLabel + Left = 10 + Height = 29 + Top = 11 + Width = 133 + AutoSize = False + Caption = 'Evento1Label' + Constraints.MaxHeight = 80 + Font.Color = clWhite + Font.Height = -21 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + end + object Evento2Label: TLabel + Left = 10 + Height = 29 + Top = 51 + Width = 133 + Caption = 'Evento2Label' + Font.Color = clWhite + Font.Height = -21 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + end + object Evento3Label: TLabel + Left = 10 + Height = 29 + Top = 91 + Width = 133 + Caption = 'Evento3Label' + Font.Color = clWhite + Font.Height = -21 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + end + end + object TitoloLabel: TLabel + AnchorSideLeft.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 40 + Hint = 'Tabulati Astronomici Nasa'#10'Alcuni dati potrebbero differire se posizione diversa da US' + Top = 240 + Width = 767 + Alignment = taCenter + Anchors = [akTop, akLeft, akRight] + Caption = 'Prossimi Eventi' + Font.Color = clWhite + Font.Height = -29 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + ParentShowHint = False + ShowHint = True + end + object Panel1: TPanel + AnchorSideLeft.Control = Owner + AnchorSideRight.Control = Owner + AnchorSideRight.Side = asrBottom + Left = 0 + Height = 104 + Top = 120 + Width = 767 + Anchors = [akTop, akLeft, akRight] + BevelOuter = bvNone + ChildSizing.EnlargeHorizontal = crsSameSize + ChildSizing.EnlargeVertical = crsHomogenousSpaceResize + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 6 + ClientHeight = 104 + ClientWidth = 767 + TabOrder = 1 + object Image2: TImage + Left = 0 + Height = 80 + Hint = 'Visibilità' + Top = 12 + Width = 128 + Center = True + Constraints.MaxHeight = 80 + Constraints.MinHeight = 80 + Picture.Data = { + 1754506F727461626C654E6574776F726B47726170686963AB06000089504E47 + 0D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000 + 0970485973000012740000127401DE661F780000001974455874536F66747761 + 7265007777772E696E6B73636170652E6F72679BEE3C1A000006384944415478 + 9CED9A4B6C545518C7FFDF39F7CE40A180E1A1548A8A350A2D4563C035A231A2 + B4D24A5D9B18134D744508826121F848D9B971A3095B9B5042D12E20C4AD313E + 78B44510E46550012322A59DB9F77C9F8B61CA406F67A673E65CA339BF4D7B66 + EE3DDFFD7E73DE332422F0D48EFAB71FE0BF8E17688917688917688917688917 + 6889176889176889176889176889176889176889176889176889176889176889 + 1768891768891768891768891768493A024F752CC0C9CEA6546201C0D10DF7E3 + 87F50BD308454EBFD63CFEE23D86C23EA8F031408390BF06E64F950A3FC18ABE + 7C5D639D5E9FE5F1F06D26FD2AA9EC3CB0C422B993418C4D787CDFB5BAC62AC1 + A9C078B8EB3085F73C0D04B75FE4F11CCCE84512EE53A1F9088FEEFFDB2AC8E9 + F573386AD826826EA8D94BA1B299E25B24B148FCE721DDDAFF9C558C32B81378 + AA63818967FE8060DE92E40B7286E2D1F3027348C7D881F6FECBD3AA7FA8F35E + 437A1748AF1335FB015299E4E128BE7651E7F3EDAE5A6150F9921AC9AB99D05A + 4F7D41564B905D06895F37F8FB79197EE99BC0F016B40F9C2D5BEFF11797C52A + DB4B2ABB0641E31220202A7B0369049CAD25856A70DA8579F8E56109E7AFA8EE + 6A03C4372E41F2438C684BD87AE068E9BBD1C80B8F13677B49856DD08D8B4165 + 3E9B1228BE3AA456EC5D39ED87AF12772D100024DA03CEED2A1D97A64603C1DC + 26083729BEF18419E93E4D6CFA014094EE5234A70599D90BA7B570E0F11C843F + ABF5F1ABC1ED2C7C6EED0C7373FE7104F35BA67FB300120322800A0194EFA849 + F74BF4C74F01E9B6BACFF825B85D073EF8D53819D30FC99BE9DF4C008580CAA0 + 1679E071A3983F77290F486121AD66E6DE87B971C1759C02020803C220337A5E + 65B8D77544F73B9196C1EB10731812391C2B0440415CE16F2446CC41EB356615 + A4B295D306DB61462FD6BFE61271457960C08C5E0CA3FC8EFAC79B4C3A7BE1F6 + FECB22D1B7400D43E194486182915B122744C660315FE389C12B750C3625A99D + C60426DE0C73E3927D4D32B9C54D8814C08CFD1602DBECE354477AC759ED0367 + C5E4460A89D7C25DE35C69AB9B281B08E22368DB77A63E0F5D9954CF0385E2CD + 90D1E9ED79A71AE712CAC2635745F1F6BA3F7819521518B61E380ACE9D2948A9 + 06B9B37B2676DF62D980C03F85CB07BE77F5FC49A47E224DCC7BC15185AB1244 + 4D74D75299A5FF9B42DD29E3762F9C88D0D43B8B0431D5964500AE7030E380D4 + 5BA028DD0595F4B95537CE4D59268104E84A2F9302A90A8C8637AC82CA3E7C67 + 0B2C76D78416352D9102113C12FDB8F1C934734A552049B81B346B51A154CDB2 + 64AAEE9B7C3D010B28361FA499537A028F753C443AD30A225877D7C4D9B9D092 + 49D08E91CE1A8ECF6A233581B10E7743CF6A2A265A9BB82AC482EF33863F4C2B + AF74041EEB5AA448AD86DC6A7DD35ADFD5547E0A27BA17A7915A2A0223929DA2 + 1A9A93C7B90AEBBB8AE36452D93447516E671AB9B91778B2B35169FD2C48516D + AD2A6976AEB4BD335024EBF05DCF5CD7E93917C8466F859AB1B4FEE35EF9658F + 20BF9467DC7CC7757E6E058EF46444A807D03AB10595ED8EA6C2FB49E5DBF513 + C74A04DD38B77686CB149D6EE558A237A1B2CD13677615B76745097C0590D3C4 + B8F5B526BA2068017861F9FBEF2A9BB1A57CBDE12D05EC7695A3EBDFC60C916A + 68AD2C6E42DEAFC23C24DA6C09577C79A4B4AE6878C32A25E8054B1B286A9A98 + 782A88143D67245839D8EA2A4777024F742F36826F41D9A60AE204C2BF08E49B + 40780B567EF173D97A8F753C1413F712C91A987C331053D9FAF5AC4B3ADBB01A + 8FEEAFC369F864DC75E138370E95615071E17C67720266123E0F92C31AF42EDA + 067EAFAADEF681B301B009C7BA16198DF7089967C58C3F0044FAF6EC5C2A9318 + 7933E62A4DB75DF8F8C6834A87CF0870BB9588C983F80281F6AA6CFE03B40C5E + B70A72B2B3917366AB90E9018F378373D9A23C82160EE61E0A560EFE077FDE06 + 004736CE3301F7016A392044247FC1F01ED5603E46CB60AEAEB1467A321C8FBD + 0132AF01F13C6140480F0751E32B78B2EFAFBAC62AC1ADC022A73A164028E36A + 1C9AC489EEC5B8A96FBA1457241D81FF63FCAFF42DF1022DF1022DF1022DF102 + 2DF1022DF1022DF1022DF1022DF1022DF1022DF1022DF1022DF1022DF1022DF1 + 022DF1022DF1022DF1022DF1022DF1022DF90753503E6398F6EE7F0000000049 + 454E44AE426082 + } + Proportional = True + Stretch = True + end + object VisibilitaLabel: TLabel + Left = 128 + Height = 80 + Hint = 'Visibilità' + Top = 12 + Width = 128 + AutoSize = False + Caption = 'Ottima' + Font.Color = clWhite + Font.Height = -21 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + end + object Image3: TImage + Left = 256 + Height = 80 + Hint = 'Copertura Nuvolosa' + Top = 12 + Width = 127 + Center = True + Constraints.MaxHeight = 80 + Constraints.MinHeight = 80 + Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869636306000089504E47 + 0D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000 + 0970485973000012740000127401DE661F780000001974455874536F66747761 + 7265007777772E696E6B73636170652E6F72679BEE3C1A000005F04944415478 + 9CED9A4F6C14551CC7BFBFF766F64F0B768BD2BF883522C47F89448E78D26822 + E1A4213170E3E8C5C488172F1E3948623C68623819E500373C182F1A89774F06 + 1212A116B6A5D0764BA15B66DFFB79D89DEDCEECECB6F3DE4CB724EF937499E9 + FCDE9FF9F4F7FECC32C4CC70982306DD81A71D27D01227D01227D01227D01227 + D01227D01227D01227D01227D01227D01227D01227D01227D01227D01227D012 + 27D01227D01227D01227D01227D0126FD01D48C3E222F6F010865580D27205D5 + 57812783EE13EDE6FFD6FC07285456D419099C86E029011A16048F89188A1B8A + F81131CD6AE0627D595E9D99417DA7FBB85B057A0B0FF557C47CCAF7E88027A8 + 44BD22190898EB418039CDF87EA222BE01D0D8A98EEE3A810BCB781DA47F2EFA + 38EC492AA629AB34EAF5806F28254E4EEDC37F79F5B1935D2570F161E33891F8 + A924E9207AA65C7F18C0E30D7D9B049F1EDBEBFD95690713D86981E2EE12A685 + 805CABA07A08D8082FDC5909DE2C48F94BC9A76943776D5A12679590EF4DEDC5 + 0DCBEAFAB22302E757D509687C21044D4BC1253079CCA86BC21A345FD7A4CF0B + D08F43BE3C6C9A795D30F028E0EBEB4BE2689E8B4BAE02EFDFC7A42AA82B9EA0 + D70A924628410E33B0D1E0FB058FF609CA765FAA3482F540FF3031223FC9B2DE + 4E7213B8B88A43CCEAD75241BC24B2CA2A03D637F41C7BF2D8D83016F2A83F97 + 27916A15431AFA6AB938587900502CD0B46EE8CFF2AA3F178134ACBE2E797879 + C0EE0000828888F407B9D59F75853781A204BD2B05C9ACEB36810108A291D91A + 46F3A83F7381E587EA63DFC3F359D76B02330006A410CF16D1389A471B990B94 + 1A27A548F7049135CCAD1F347FC05C06D1781E6D65FF6D0CE3B941CD7DDCFA08 + F715E1068308D08AF6E6D166F602092AF33AB780DB1FDDF2180CCD5010FC208F + B6331BC2F3ABEAC4424DFD2E0847B0834F87E13C170ED7CDE1CB606630034A63 + 8594BA9E47FBD61BE93B4B38E079EA8A2FC4115FA292F4B49107BD862B77A462 + 784D29D41A4095B5AE0BA25B1AFCDDE488F75B16FDB01258AD05C724C9CB659F + 6606252E22B175D22D357AAE355615E3A6863A3B5DF1FFB6E98FB1C0EA320E4A + A9FF28FBF4E24EC8DB6A9E8B8A8CC5265C6300AC7147317F3E352A2F99F6CB58 + E0BD5575AD5C10C77722F17A65525C5C576C0F71CDB8E691D698678F3F9A32FC + EED0681159A835DEF104BD91B7BCF6A2D0791C2E1009C3B52BB6E338491E0320 + C204357011806FD247C35598CEF99246CCCA6E4D5456F3175D59C7DD719DE761 + 3DD115BAB532232A194433F335FDA9495F8D0412D10B79CC7BC9D9120AD8DC96 + 44320B4992636263E222B1CDE322834F99F439B5C0D91A4685C0B04963FDD8CE + 7E8EFBC576950B6337876B2473E3E534C66E02A91F41530B1C0A502270661BF0 + 5E029AD7B631CF750CE5F83CD7CEBA8472EDD8CDF60A7B563099B6FFA91FE5D6 + 3CACEF61D269CBC589AF8A7DF7737D63D125AEFD7B6CFE313A8FE3D79A759050 + 1E0A69EF237526CD54B0C28CB5B4E53A493DCFC5B22539033971B8221ED755AE + 152B78A350C7DDB4F762341499F9B6C9F6B1F78D246F4B4CE6B97EDB99F84283 + 48DB5CDBBF3F7D621809D4CCE703C52BDB8DDFD63CC77D04746492CD3C17ADB3 + AD0ED48CB866E2C2E649E4CFB22FDEEEB79DE1F647D2BC93DD3CD795B989ED85 + 719BF71B5EF324DD6229DF3AF00C967ADF4D32C6ABA952F2CC7AC0FFF6F26FBA + 2D3199E7B6CCDC30B6D56267AC10B4EC115D30910758089C1CC56C43AB0FD79F + F0ADC84A875E02B27BFC4A33CF45866BAC9C245A964497C62BE25B530FD6DF07 + CE3DC074C15797A5A0570A822A1C0EE9C810EC16D70A899C275F8B651CFAC522 + 161B2D1BFE230096926E7B44176CE40119BE99706FB5F13E339D23A283602E93 + A01223FAA64B574BB1CC8D9E73576CAF9EC66F81138E495383046F005C03F81A + 4BFF4BD361DB492EAF762CAC612C089E4C484146DF70E4010B7F4D3EC6DCF838 + 1E6559EFAE7A3FF069C4BDA56F89136889136889136889136889136889136889 + 1368891368891368891368891368891368891368891368891368891368891368 + 891368891368891368C9FFF5D259C41C6BCCCB0000000049454E44AE426082 + } + Proportional = True + Stretch = True + end + object CoperturaLabel: TLabel + Left = 383 + Height = 80 + Hint = 'Copertura Nuvolosa' + Top = 12 + Width = 128 + Caption = '25%' + Font.Color = clWhite + Font.Height = -21 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + end + object Image4: TImage + Left = 511 + Height = 80 + Hint = 'Vento a 10 e a 180m' + Top = 12 + Width = 128 + Center = True + Constraints.MaxHeight = 80 + Constraints.MinHeight = 80 + Picture.Data = { + 1754506F727461626C654E6574776F726B47726170686963F204000089504E47 + 0D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000 + 0970485973000012740000127401DE661F780000001974455874536F66747761 + 7265007777772E696E6B73636170652E6F72679BEE3C1A0000047F4944415478 + 9CED9BBD6F1C4518877F337B9FC6B1B12105526C2852428A2028110D28891C0B + 4BFC0374140821525020241A8A94F9079022A588045514E5C3B11205A5410417 + 80451123210C32451CE3BB93EF6676E67D29EEF6723E3BC6D961EE2EC9FB48AB + D5EE8EE6E3D13BEFECEEED296686901F3DEC0E3CE988C0404460202230101118 + 88080C44040622020311818188C040446020223010111888080C440406220203 + 11818188C0400A312A5D5D5D2D5BA73F0578DA15F8DCB1A347FF8CD1CE281045 + 60CBA9AF14700650489C7A1BC01B31DA1905A2085450C77B0E5FEFBDB6353F7F + 5C6B7D9E01C7443578FF1B987FF0ADD677D3376FAEC4E84F4CA208049402BABF + F6A9DE2BCCFC497166E655552CB68FD3F42DB6F6035FAB6DD44F9E3C73E8EAD5 + F359D9C6A9538709F88881BF7C9AFE5464BE77686969234E9FF31149E0A35144 + 25A51FAE5DAA586C6F95CA0BA65E9F03D015E893E442E9C89177E13DC8981A37 + 9BB5DAC2428B9DFBDD361A0B876FDD6AF4D6BD3E3F3FF6D2A54BDB831BCD1004 + 3E0E4AA9495DAD0200F4F8F804800900F08DC62B6A6DED3D0017B2B25BA74F7F + FB5CB9FC667D61A1C5DED741B40160C51BF3F5D48D1B3FC7EAE3480B7C144AA9 + 023A323374A1F05A697676A67B82196CED3BE9FAFAFB5B7373C7262F5FDE8CD1 + 9791B90F64A28397F51EBEFF5C5FAE855250E53254B53AC6D6BEFC3F74714F86 + 1F81CCA03405590BFC97446690B5F0D61EA85E6F4CBBDE880C5520A529D8B9AE + C0FDBED3C9CA509A825AAD7D6593B56D799D2D264311C8DEB745F40A4C53A83D + A464D77D26CF5AB0317DF3B50D390732A62BCF1B03656DD43C357881CCF0AD16 + 88689740DD1F814470CDE6C3C8EBEC610C12BF330BB2F7708DC60E79640C9473 + 2815E20D73E00289A83DB84E1476053A07DD17814C04B7BDBD73FA5A0B95A648 + FAA4B0F7481B8D5D1158D49AB95874B1C6339429EC8D694FB71E81EC1CD02785 + 88405904F60A64DE5596BD27D711C8690A78DF2C69FD4F92247F4C4D4EFE1A6B + 2CC39BC2FD02BD07926467D12C027BF39F7328974A5B5EEB95BE7ABF2C1AF321 + 03EB4AEB655DA92C13F3BDA9A5A5B57D57A740062E9089DAD3AB336D395B4C88 + A0CAE51D8F610AB89D583B9B0056150A0D5528D488794D2BF5CDF4E2E2EDDEB2 + 53D7AF5F047071A083C17022F06F3686384DB506BCD67A13D5EA7692249B45A2 + B3BD45A716173FAB9D387176E2FEFD3AEEDE4D07DED70330F845A4D5FAA2542E + 6BAFB5D35A7F0FA25FA62B95555CB9B2E70DDBC4B56B0F06DDC7C761E0025FBC + 73A70EE0E341B71B8BA8029F857F004411C84C9DBD08CC0583011681F9210643 + 0406C1CC22302FC40496299C9F76F489C0DC30DA02D1DD3FBD445A44B2E81381 + B9C872A008CC49960345604E2407862239300CC98181480E0C447260289203C3 + A09EF781223007D933B008CC89BC500D84A9B384642BC9534C940F978879397B + A1CA443FC6686354881281CDFA83CFC7C69FDF00631AA4CFC568635450CF429E + 8AC9C87C23FDA422020311818188C040446020223010111888080C4404062202 + 0311818188C040446020223010111888080C440406220203F9179C13FD349950 + C4720000000049454E44AE426082 + } + Proportional = True + Stretch = True + end + object VentoBassoLabel: TLabel + Left = 639 + Height = 80 + Hint = 'Vento a terra e a 180m' + Top = 12 + Width = 128 + Caption = '12-24 km/h' + Constraints.MinWidth = 120 + Font.Color = clWhite + Font.Height = -21 + Font.Name = 'Noto Sans' + Layout = tlCenter + ParentFont = False + ParentShowHint = False + ShowHint = True + end + end +end diff --git a/meteo_frame.pas b/meteo_frame.pas new file mode 100644 index 0000000..8d709c0 --- /dev/null +++ b/meteo_frame.pas @@ -0,0 +1,224 @@ +unit meteo_frame; + +{$mode ObjFPC}{$H+} + +interface + +uses + {$ifdef windows} + windows, + {$endif} + Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, Buttons, TAGraph, + fphttpclient, opensslsockets, fpjson, jsonparser, graficimeteo, meteoutil, + DateUtils, Dialogs; +type + + { TMeteoView } + + TMeteoView = class(TFrame) + Image2: TImage; + Image3: TImage; + Image4: TImage; + Panel1: TPanel; + TitoloLabel: TLabel; + Evento1Label: TLabel; + Evento2Label: TLabel; + Evento3Label: TLabel; + EventiPanel: TPanel; + SpeedButton1: TSpeedButton; + CondizioniMeteoLabel: TLabel; + VisibilitaLabel: TLabel; + Label3: TLabel; + CoperturaLabel: TLabel; + VentoBassoLabel: TLabel; + procedure OttieniMeteoClick(Sender: TObject; giornometeo: TDateTime; https:boolean; lat,long : double; orasimulazione:byte); + procedure FrameResize(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + private + + public + + end; + +implementation + +{$R *.lfm} + +{ TMeteoView } +var + isfirsttime:boolean=True; + MeteoJSON: TJSONData; + OggettoJSON: TJSONObject; + meteotext:string; + latitudine:real=39.2; + longitudine:real=9.2; + posgiornometeo:integer; //la posizione relativa del giorno meteo rispetto al giorno attuale + + // giornometeo:integer; + +procedure TMeteoView.OttieniMeteoClick(Sender: TObject; giornometeo: TDateTime; https:boolean; lat, long:double; orasimulazione:byte); +var + orameteo:string;//questa è l'ora del meteo che viene usata per le previsioni + //è rappresentata da un numero da 1 a 24x7, 7 sono i giorni delle previsioni + + apimeteourl:string; + + nasafile: TextFile; + nasalinea: string; + nasastringlist:TStringList; + RisorseStream: TResourceStream; + elementi:string; + segnaposto: byte; + + + + oggi:TDateTime; + copertura, ventobasso, ventoalto, visibilita, temperatura, precipitazione:string; +begin + Application.ProcessMessages; + + oggi:= EncodeDate(YearOf(Now), MonthOf(Now), DayOf(Now)); + + posgiornometeo:= DateUtils.DaysBetween(oggi, giornometeo); + + Label3.Caption:='Ore '+inttostr(orasimulazione); + + if isfirsttime then + begin + isfirsttime:=False; + apimeteourl:=stringarichiesta(https, lat, long); + try + meteotext:=TFPHttpClient.SimpleGet(apimeteourl); + except + On e:Exception do + begin + //in caso di errore isfirsttime sempre true + isfirsttime:=True; + if e.Message='Could not initialize OpenSSL library' then + begin + Dialogs.ShowMessage('Installa OpenSSL per usare HTTP sicuro (HTTPS) altrimenti disabilitalo dalle impostazioni.'); + end; + + end; + end; + + + //ESocketError + end; + + + + if ((oggi>giornometeo) or (posgiornometeo>6)) or isfirsttime then //sono 6 giorni e non 7 perchè posgiornometeo inizia da 0 e non 1 + begin + copertura:= '---'; + temperatura:= '---'; + ventobasso:= '---'; + ventoalto:= ' ---'; + visibilita:= '---'; + precipitazione:= '---'; + + SpeedButton1.Enabled:=False; + + end + else + begin + SpeedButton1.Enabled:=True; + + orameteo:=inttostr((posgiornometeo)*24+orasimulazione); + + + //meteotext:='{"latitude":40.0,"longitude":9.1875,"generationtime_ms":0.9932518005371094,"utc_offset_seconds":0,"timezone":"GMT","timezone_abbreviation":"GMT","elevation":886.0,"hourly_units":{"time":"iso8601","weather_code":"wmo code","temperature_2m":"°C","wind_speed_10m":"km/h","wind_speed_180m":"km/h","visibility":"m","cloud_cover":"%"},"hourly":{"time":["2026-01-31T00:00","2026-01-31T01:00","2026-01-31T02:00","2026-01-31T03:00","2026-01-31T04:00","2026-01-31T05:00","2026-01-31T06:00","2026-01-31T07:00","2026-01-31T08:00","2026-01-31T09:00","2026-01-31T10:00","2026-01-31T11:00","2026-01-31T12:00","2026-01-31T13:00","2026-01-31T14:00","2026-01-31T15:00","2026-01-31T16:00","2026-01-31T17:00","2026-01-31T18:00","2026-01-31T19:00","2026-01-31T20:00","2026-01-31T21:00","2026-01-31T22:00","2026-01-31T23:00","2026-02-01T00:00","2026-02-01T01:00","2026-02-01T02:00","2026-02-01T03:00","2026-02-01T04:00","2026-02-01T05:00","2026-02-01T06:00","2026-02-01T07:00","2026-02-01T08:00","2026-02-01T09:00","2026-02-01T10:00","2026-02-01T11:00","2026-02-01T12:00","2026-02-01T13:00","2026-02-01T14:00","2026-02-01T15:00","2026-02-01T16:00","2026-02-01T17:00","2026-02-01T18:00","2026-02-01T19:00","2026-02-01T20:00","2026-02-01T21:00","2026-02-01T22:00","2026-02-01T23:00","2026-02-02T00:00","2026-02-02T01:00","2026-02-02T02:00","2026-02-02T03:00","2026-02-02T04:00","2026-02-02T05:00","2026-02-02T06:00","2026-02-02T07:00","2026-02-02T08:00","2026-02-02T09:00","2026-02-02T10:00","2026-02-02T11:00","2026-02-02T12:00","2026-02-02T13:00","2026-02-02T14:00","2026-02-02T15:00","2026-02-02T16:00","2026-02-02T17:00","2026-02-02T18:00","2026-02-02T19:00","2026-02-02T20:00","2026-02-02T21:00","2026-02-02T22:00","2026-02-02T23:00","2026-02-03T00:00","2026-02-03T01:00","2026-02-03T02:00","2026-02-03T03:00","2026-02-03T04:00","2026-02-03T05:00","2026-02-03T06:00","2026-02-03T07:00","2026-02-03T08:00","2026-02-03T09:00","2026-02-03T10:00","2026-02-03T11:00","2026-02-03T12:00","2026-02-03T13:00","2026-02-03T14:00","2026-02-03T15:00","2026-02-03T16:00","2026-02-03T17:00","2026-02-03T18:00","2026-02-03T19:00","2026-02-03T20:00","2026-02-03T21:00","2026-02-03T22:00","2026-02-03T23:00","2026-02-04T00:00","2026-02-04T01:00","2026-02-04T02:00","2026-02-04T03:00","2026-02-04T04:00","2026-02-04T05:00","2026-02-04T06:00","2026-02-04T07:00","2026-02-04T08:00","2026-02-04T09:00","2026-02-04T10:00","2026-02-04T11:00","2026-02-04T12:00","2026-02-04T13:00","2026-02-04T14:00","2026-02-04T15:00","2026-02-04T16:00","2026-02-04T17:00","2026-02-04T18:00","2026-02-04T19:00","2026-02-04T20:00","2026-02-04T21:00","2026-02-04T22:00","2026-02-04T23:00","2026-02-05T00:00","2026-02-05T01:00","2026-02-05T02:00","2026-02-05T03:00","2026-02-05T04:00","2026-02-05T05:00","2026-02-05T06:00","2026-02-05T07:00","2026-02-05T08:00","2026-02-05T09:00","2026-02-05T10:00","2026-02-05T11:00","2026-02-05T12:00","2026-02-05T13:00","2026-02-05T14:00","2026-02-05T15:00","2026-02-05T16:00","2026-02-05T17:00","2026-02-05T18:00","2026-02-05T19:00","2026-02-05T20:00","2026-02-05T21:00","2026-02-05T22:00","2026-02-05T23:00","2026-02-06T00:00","2026-02-06T01:00","2026-02-06T02:00","2026-02-06T03:00","2026-02-06T04:00","2026-02-06T05:00","2026-02-06T06:00","2026-02-06T07:00","2026-02-06T08:00","2026-02-06T09:00","2026-02-06T10:00","2026-02-06T11:00","2026-02-06T12:00","2026-02-06T13:00","2026-02-06T14:00","2026-02-06T15:00","2026-02-06T16:00","2026-02-06T17:00","2026-02-06T18:00","2026-02-06T19:00","2026-02-06T20:00","2026-02-06T21:00","2026-02-06T22:00","2026-02-06T23:00"],"weather_code":[3,3,3,3,3,3,3,3,61,61,61,63,61,61,61,3,3,3,61,61,61,61,61,3,61,61,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,45,2,2,3,3,3,3,3,3,61,61,3,2,3,3,3,3,3,3,3,3,80,61,61,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,61,61,61,61,61,61,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,61,61,61,63,63,63,95,95,95,95,95,95,80,80,80,3,3,3,80,80,80,80,80,80,95,95,95,80,80,80,1,1],"temperature_2m":[3.6,3.5,3.3,2.6,2.8,3.4,4.6,5.1,4.9,4.5,4.4,4.0,4.9,5.4,5.7,5.8,5.4,4.7,4.3,4.2,4.3,4.5,4.6,4.5,4.3,4.2,3.9,3.7,3.6,3.6,3.5,3.6,4.1,4.6,5.3,6.0,6.6,6.8,6.5,6.0,5.0,4.1,3.7,3.5,3.4,3.6,3.5,3.4,3.2,2.9,2.9,3.2,3.5,3.9,4.2,4.0,4.9,6.7,7.9,8.3,8.8,9.0,9.0,8.8,8.3,7.9,8.0,8.0,8.1,8.2,8.2,8.5,8.7,8.7,8.2,8.2,7.6,7.0,6.5,6.0,6.4,6.7,7.1,7.7,7.8,7.7,7.5,7.2,6.8,6.4,5.9,5.5,5.1,4.8,4.7,4.6,4.5,4.3,4.2,4.0,3.8,3.6,3.7,4.2,5.0,5.7,6.4,7.1,7.4,7.3,6.9,6.4,5.8,5.1,4.5,4.3,4.2,4.2,4.1,4.0,4.1,4.5,5.1,5.4,5.8,6.1,6.6,7.6,8.3,9.0,9.7,10.4,10.8,11.0,10.9,10.7,10.3,9.8,9.6,9.9,10.4,11.0,11.6,12.2,12.5,12.4,12.1,11.7,11.2,10.7,10.4,10.5,10.8,11.1,11.5,12.0,12.2,12.1,11.7,11.3,10.9,10.3,9.9,9.6,9.4,9.3,9.1,9.1],"wind_speed_10m":[2.9,0.0,3.3,6.2,7.6,8.6,10.9,11.9,12.4,11.2,8.7,7.8,6.9,5.0,3.4,5.7,5.4,6.8,8.7,9.0,9.4,10.7,11.0,9.9,9.6,8.8,7.8,8.0,8.7,9.8,9.6,8.2,8.9,11.1,12.5,17.8,21.6,21.7,21.4,20.7,17.6,11.1,10.0,9.4,8.9,8.1,6.8,5.1,2.1,1.1,0.7,3.4,1.1,1.5,3.7,3.5,5.2,5.0,7.2,8.3,8.4,7.1,7.9,6.5,7.6,7.8,9.3,9.4,9.7,10.9,10.5,11.8,10.5,8.7,7.0,7.5,10.7,9.7,3.3,4.5,6.0,8.3,11.5,16.1,16.0,14.5,11.5,8.1,4.9,2.2,2.7,3.7,4.4,4.5,4.6,4.3,4.0,3.4,2.5,2.3,2.5,2.9,3.3,3.3,3.7,4.6,7.0,9.9,11.9,13.0,13.3,12.0,7.8,2.5,3.1,4.1,4.5,4.7,4.8,5.5,5.5,2.6,1.6,4.4,3.6,2.4,2.9,2.4,2.7,2.9,5.0,8.4,10.4,9.9,8.2,7.0,7.3,9.7,11.8,12.3,11.7,10.9,14.9,24.9,32.9,33.8,30.6,27.9,26.1,24.3,23.3,22.7,23.0,23.1,23.1,23.1,23.0,22.1,20.8,20.0,19.9,19.8,19.4,18.8,18.3,17.0,14.0,10.2],"wind_speed_180m":[14.8,10.5,4.8,4.3,11.8,16.1,23.4,24.9,26.5,22.7,18.6,18.9,17.9,12.4,11.7,18.2,21.1,18.1,20.1,20.5,23.0,25.9,25.7,22.1,21.6,19.1,17.3,17.9,19.5,23.2,21.3,20.0,20.5,22.6,23.8,30.6,39.5,39.1,39.4,39.1,34.4,25.8,23.5,22.2,22.6,21.7,17.8,14.6,10.2,9.5,8.3,11.0,11.7,11.8,13.8,7.9,7.6,7.6,9.4,11.2,12.4,9.8,11.9,11.0,13.5,15.3,18.9,18.6,20.4,22.7,22.6,25.6,22.1,19.0,20.6,23.7,25.2,21.3,8.3,13.2,14.8,18.0,25.6,32.0,31.1,27.8,21.4,15.3,10.2,6.3,4.0,3.8,4.5,5.1,5.8,6.5,6.6,5.4,4.3,3.8,4.1,5.7,6.9,7.0,6.6,6.7,9.4,14.0,17.9,19.9,20.5,19.4,15.6,10.2,7.4,8.4,10.3,10.9,9.4,6.8,4.6,6.0,14.3,19.5,15.6,9.8,6.6,7.2,5.0,4.4,7.4,12.0,15.0,15.0,14.1,12.9,14.5,20.6,24.5,24.2,23.8,25.6,35.6,55.0,70.0,72.7,68.9,64.4,61.8,58.8,55.8,53.3,51.0,48.8,46.9,45.1,43.6,42.9,42.3,42.7,44.3,46.6,47.7,47.5,47.1,45.4,39.4,32.0],"visibility":[10140.00,8560.00,10340.00,10440.00,31700.00,59540.00,72020.00,73620.00,16040.00,25060.00,7260.00,9440.00,38820.00,45160.00,45200.00,45100.00,44560.00,32140.00,30300.00,30340.00,25100.00,21480.00,21900.00,24440.00,25760.00,26040.00,22920.00,21020.00,16160.00,18780.00,18720.00,13380.00,14960.00,19260.00,27360.00,38640.00,51760.00,48940.00,44160.00,43960.00,33500.00,15940.00,13920.00,14720.00,12380.00,12780.00,10900.00,11540.00,9280.00,6980.00,9040.00,11760.00,10960.00,8860.00,4980.00,3500.00,5520.00,28720.00,43500.00,37280.00,31000.00,27840.00,24280.00,22760.00,17140.00,16960.00,18880.00,23940.00,32060.00,36540.00,41620.00,47640.00,52360.00,52260.00,40700.00,28760.00,5080.00,1960.00,2280.00,1520.00,8980.00,16280.00,11940.00,13240.00,13480.00,11920.00,10340.00,8780.00,8800.00,8820.00,8840.00,8720.00,8600.00,8480.00,11420.00,14360.00,17300.00,20560.00,23820.00,27080.00,21820.00,16540.00,11280.00,14280.00,17280.00,20280.00,26780.00,33280.00,39780.00,37500.00,35240.00,32960.00,24400.00,15840.00,7280.00,8300.00,9340.00,10360.00,11060.00,11740.00,12440.00,9780.00,7140.00,4480.00,4865.00,4570.00,3885.00,1240.00,680.00,120.00,100.00,60.00,40.00,220.00,380.00,560.00,800.00,1040.00,1280.00,880.00,480.00,80.00,60.00,60.00,40.00,40.00,40.00,40.00,1180.00,2300.00,3440.00,2320.00,1200.00,80.00,80.00,80.00,80.00,700.00,1340.00,1960.00,1780.00,1600.00,1420.00,9000.00,16560.00,24140.00,24140.00,24140.00],"cloud_cover":[100,94,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,93,100,100,100,90,79,72,58,62,70,70,80,85,100,100,90,81,85,92,90,100,97,92,100,99,97,99,91,80,76,60,86,90,94,99,99,100,100,98,90,80,99,100,100,100,100,100,100,100,100,100,100,100,100,100,90,88,92,92,92,92,94,96,98,99,99,100,100,100,100,100,100,100,100,100,100,100,100,100,90,81,71,81,90,100,100,100,100,100,100,100,100,100,100,99,97,96,96,96,96,85,81,78,84,91,97,98,99,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,94,87,81,87,92,98,99,99,100,99,98,97,78,59]}}'; + + MeteoJSON:=fpJSON.GetJSON(meteotext); + OggettoJSON := MeteoJSON as TJSONObject; //questo è stato fatto per rendere i dati meglio estraibili + + + copertura:= floattostr(round(OggettoJSON.FindPath('hourly.cloud_cover['+orameteo+']').AsFloat))+'%'; + temperatura:= floattostr(round(OggettoJSON.FindPath('hourly.temperature_2m['+orameteo+']').AsFloat))+'°'; + ventobasso:= floattostr(round(OggettoJSON.FindPath('hourly.wind_speed_10m['+orameteo+']').AsFloat)); + ventoalto:= floattostr(round(OggettoJSON.FindPath('hourly.wind_speed_180m['+orameteo+']').AsFloat))+'km/h'; + visibilita:= floattostr(round(OggettoJSON.FindPath('hourly.visibility['+orameteo+']').AsFloat/1000))+'km'; + + precipitazione:= meteoutil.calcolaprecipitazione(OggettoJSON, strtoint(orameteo)); + + end; + + + CondizioniMeteoLabel.Caption:=precipitazione+' '+ temperatura; + CoperturaLabel.Caption:= copertura; + VentoBassoLabel.Caption:= ventobasso+'-'+ventoalto; + VisibilitaLabel.Caption:=visibilita; + + + + + + // TODO: cercare di togliere la maggiorparte delle cose dal try questo migliora la velocità del codice + + try + RisorseStream:= TResourceStream.Create(HInstance,inttostr(yearof(giornometeo))+'_NASA', RT_RCDATA); + nasastringlist:=TStringList.Create; + SetLength(nasalinea, RisorseStream.Size); + RisorseStream.Read(nasalinea[1], RisorseStream.Size);; + nasastringlist.AddDelimitedText(nasalinea, #10, True); + + Evento1Label.Caption:=''; + Evento2Label.Caption:=''; + Evento3Label.Caption:=''; //resetta i campi per gli eventi + + // Open the file for reading + segnaposto:=0; + for elementi in nasastringlist do + begin + if elementi='' then break; + if EncodeDate(yearof(giornometeo), strtoint(copy(elementi, 1,2)), strtoint(copy(elementi,5,2))) >= giornometeo + then + begin + + case segnaposto of + 0: Evento1Label.Caption:=meteoutil.FormattaAstroLinea(elementi); + 1: Evento2Label.Caption:=meteoutil.FormattaAstroLinea(elementi); + 2: begin + Evento3Label.Caption:=meteoutil.FormattaAstroLinea(elementi); + break; + end; + end; + segnaposto:=segnaposto+1; + end; + end; + + + except + on E:EResNotFound do + begin + Evento1Label.Caption:='Dati Non disponibili'; + Evento2Label.Caption:=''; + Evento3Label.Caption:=''; + end; + + end; + + + + + end; + + + +procedure TMeteoView.FrameResize(Sender: TObject); +begin + +// if Panel1.Parent.Width> 850 then Panel1.Width:=(Panel1.Parent.Width div 10)*8 + //else Panel1.Width:=Panel1.Parent.Width; +end; + + +procedure TMeteoView.SpeedButton1Click(Sender: TObject); +begin + graficimeteo.Form3.meteotext:=meteotext; //passo la variabile del frame meteotext al form. La variabile si chiama anche nel form meteotext + graficimeteo.Form3.meteoposgiorno:=posgiornometeo; //passo la variabile posizione del giorno anche stavolta al form + graficimeteo.Form3.Show; +end; + +end. + diff --git a/settingsutils.pas b/settingsutils.pas new file mode 100644 index 0000000..dc564af --- /dev/null +++ b/settingsutils.pas @@ -0,0 +1,139 @@ +unit settingsutils; + +{$mode ObjFPC}{$H+} + +interface + +uses + + Classes, SysUtils; + + +type + TImpostazioniDati=record + Latitudine, Longitudine :Double; + OraSimulazione: integer; + httpsIsEnabled:boolean; + LinguaApp:string; + end; + + +function LeggiImpostazioni():TImpostazioniDati; +procedure ScriviImpostazioni(dati:TImpostazioniDati); + + + var + FileImpostazioni:TextFile; + filenome:string='./.starstreet_data/settings.dat'; + +implementation + + + procedure ScriviImpostazioni(dati:TImpostazioniDati); + begin + + {$ifdef darwin} + + filenome:= SysUtils.ExtractFilePath(ParamStr(0))+'.starstreet_data/settings.dat'; + + {$endif} + + if not(SysUtils.FileExists(filenome))then + begin + {$ifdef darwin} + + SysUtils.CreateDir(SysUtils.ExtractFilePath(ParamStr(0))+'.starstreet_data'); + + + {$else} + + SysUtils.CreateDir('./.starstreet_data'); + {Comportamento: crea una cartella nel punto di esecuzione del + programma, concide con home/ nel caso l'eseguibile venga eseguito + in /bin diversamente coincide dalla directory nel quale è stato aperto} + FileSetAttr('./.starstreet_data', faDirectory or faHidden); //rende la cartella nascosta su windows + + + {$endif} + + + + + end; + AssignFile(fileimpostazioni, filenome); + Rewrite(FileImpostazioni); + + WriteLn(FileImpostazioni, ('LAT'+ ' '+ floattostr(dati.Latitudine))); + WriteLn(FileImpostazioni, ('LONG'+ ' '+ floattostr(dati.Longitudine))); + WriteLn(FileImpostazioni, ('LANGUAGE'+ ' '+ dati.LinguaApp)); + WriteLn(FileImpostazioni, ('HOUR_SIMULATION'+ ' '+ inttostr(dati.OraSimulazione))); + WriteLn(FileImpostazioni, ('HTTPS_ENABLED'+ ' '+ booltostr(dati.httpsIsEnabled))); + + CloseFile(FileImpostazioni); + + + end; + + + + + +function LeggiImpostazioni():TImpostazioniDati; +var +ElementoDati: TStringList; +tmpstring:string; +begin + ElementoDati:= TStringList.Create; + ElementoDati.Delimiter:=' '; + + {$ifdef darwin} + + filenome:= SysUtils.ExtractFilePath(ParamStr(0))+'.starstreet_data/settings.dat'; + + {$endif} + + if SysUtils.FileExists(filenome) then + begin + AssignFile(fileimpostazioni, filenome); + Reset(fileimpostazioni); + repeat + ReadLn(fileimpostazioni, tmpstring); + ElementoDati.DelimitedText:=tmpstring; + + case ElementoDati[0] of + 'LAT': LeggiImpostazioni.Latitudine:=strtofloat(ElementoDati[1]) ; + 'LONG': LeggiImpostazioni.Longitudine:=strtofloat(ElementoDati[1]); + 'LANGUAGE': LeggiImpostazioni.LinguaApp:=ElementoDati[1] ; + 'HOUR_SIMULATION': LeggiImpostazioni.OraSimulazione:=strtoint(ElementoDati[1]) ; + 'HTTPS_ENABLED': LeggiImpostazioni.httpsIsEnabled:=strtobool(ElementoDati[1]) ; + + end; + + until eof(fileimpostazioni); + CloseFile(fileimpostazioni); + end else + begin + LeggiImpostazioni.Latitudine:=39; + LeggiImpostazioni.Longitudine:=9; + LeggiImpostazioni.LinguaApp:='Italiano'; + LeggiImpostazioni.OraSimulazione:=21; + {$ifdef darwin} + LeggiImpostazioni.httpsIsEnabled:=False; + {$else} + LeggiImpostazioni.httpsIsEnabled:=True; + {$endif} + end; + + + + +end; + + + + + + + +end. +