Mrknu se po zdrojáku, protože pokud se pamatuju, tak UNT je binární, ale struktura je jednoduchá, myslím, že jen čísla naházená ve správném pořadí a formátu za sebou. Já to tenkrát louskal HexEditorem na pokusných souborech.
Ad 1) tady to půjde jednoduše, třeba :
if Edit1.Text[1] = ',' then Edit1.Text = '0'+Edit1.Text;
Bylo by však lépe, kdyby se navíc zajistilo, že bude použit správný oddělovač desetinného místa. Kdyby měl někdo v systému nastavenou tečku namísto čárky, tak ten následný převod klekne. To, jaký oddělovač desetinné pozice je v systému nastaven zjistíš z proměnné DecimalSeparator. Asi by bylo nejjednodušší projít všechny znaky daného čísla a nečíslné zaměnit za DecimalSepartor. To už je celkem blbuvzdorné, ne úplně, ale dost. Proti náhodné mezeře na začátku či konci čísla se hodí funkce Trim.
Po kupě by se to dalo udělat třeba takhle :
var i:integer;
for i:= 1 to Length(Edit1.Text) do
if (Edit1.Text[i] < '0') or (Edit1.Text[i] > '9') then Edit1.Text[i]:=DecimalSeparator;
Edit1.Text:=Trim(Edit1.Text);
if Edit1.Text[1] = DecimalSeparator then Edit1.Text = '0'+Edit1.Text;
No a nebo přes funkci StrScan, ale tam si nejsem jistý, jestli by to bylo jednodušší, ta funkce pracuje s PChary.
Ad 2) Napadá mě, že by se to dalo udělat takhle :
var i:integer;
for i:= 0 to Form1.ControlCount -1 do
if (Form1.Controls[i] is TEdit) then (Form1.Controls[i] as TEdit).Clear;
To by mělo smazat všechny Edity na Form1, ale nutno zkusit.
Ad 3) Ukládání by se dalo udělat všelijak. Text je asi nejjednodušší připravit si pěkně do TMemo či TRichEdit, pokud to má být někde vidět, nebo interně do TStringList a pak už jen zavolat Memo.Lines.SaveToFile nebo StringList.SaveToFile.
Jakoukoliv bitmapu si uděláš v komponentě TImage uložíš jednoduše Image.Picture.SaveToFile
Pro PNG si budeš asi muset něco sehnat, ale nějaká taková komponenta nebo knihovna by měla být po ruce. Vím určitě, že jsem se kdysi setkal s komponentou, která uměla číst a ukládat GIF.
Pro ukládání UNT souborů jsem tenkrát napsal tohle :
unit UConv;
interface
type
TUntHead = record
StartID : word; // 100
Unknown1 : single; // Default 0
Unknown2 : single; // Default 0
Reb : single; // Default 0
Leb : single; // Default 0
Manuf : array [1..100] of char; // Manufacturer
Model : array [1..100] of char; // Model
Typ : word; // 0 - 6
Sd : double; // m^2
r : double; // m
Vas : double; // m^3
Cms : double; // N/m
Cas : double; // m^5/N
Qms : double; // []
Qes : double; // []
Qts : double; // []
P : double; // W
Xmax : double; // m
AirGap : double; // m
VoiceCoil: double; // m
Mmd : double; // kg
Mms : double; // kg
Rms : double; // Ns/m
Fs : double; // Hz
BL : double; // N/A
Re : double; // Ohm
Le : double; // H
Cross : word; // Crosscalc (1=True)
Len : word; // Comment Length
end;
TUntNote = array[1..601] of Char;
TUntTail = record
DualCoil : word; // (1=True)
EndID : word; // Default 12345
end;
TUntFile = record
Head : TUntHead;
Note : TUntNote;
Tail : TUntTail;
end;
procedure SetUntToDefault(var U: TUntFile);
procedure SaveUntFile(const U: TUntFile; const S:String);
implementation
uses Classes, SysUtils;
procedure SetUntToDefault(var U: TUntFile);
begin
with U.Head do
begin
startid:=100; unknown1:=0; unknown2:=0;
reb:=0; leb:=0; typ:=1; sd:=0; r:=0; vas:=0;
cms:=0; cas:=0; qms:=0; qes:=0; qts:=0; p:=0;
xmax:=0; airgap:=0; voicecoil:=0; mmd:=0;
mms:=0; rms:=0; fs:=0; bl:=0; re:=0; le:=0;
cross:=0; len:=1;
end;
U.Tail.DualCoil:=0;
U.Tail.EndID:=12345;
FillChar(U.Head.Manuf,100,0);
FillChar(U.Head.Model,100,0);
FillChar(U.Note,601,0);
end;
procedure SaveUntFile(const U: TUntFile; const S:String);
var f:TFileStream;
begin
f:=TFileStream.Create(S,fmCreate);
try
f.WriteBuffer(U.Head,SizeOf(U.Head));
f.WriteBuffer(U.Note,U.Head.Len);
f.WriteBuffer(U.Tail,SizeOf(U.Tail));
finally
f.free;
end;
end;
end.