C a C++ > Obecné
UnicodeString.sprintf(...) - nepochopitelné chování
(1/1)
hlucheucho:
Ahoj
když udělám:
--- Kód: ---UnicodeString us;
float val;
TStringGrid *Tabulka;
us.sprintf(L"%e", val);
Tabulka->Cells[j] [i] = us;
--- Konec kódu ---
vše funguje normálně. K mému překvapení
--- Kód: ---float val;
TStringGrid *Tabulka;
Tabulka->Cells[j] [i].sprintf(L"%e", val);
--- Konec kódu ---
nefunguje, buňka je prázdná. Proč?
C++ Builder XE5
hu
zdenek:
Podle mne se v první případě volá Set.... na property a v druhém případěn se volá Get... které vrátí kopii stringu (a ne odkaz na něj uvnitř gridu) a ty pak měníš obsah jen dočasné proměnné, která se pak zahodí.
Tento kód z delphi je obdobný (omlouvám se za pascal, v c dělám jen ve VS):
--- Kód: ---type
TTest=class
private
FMujText: string;
procedure SetMujText(const Value: string);
function GetMujText: string;
public
property MujText:string read GetMujText write SetMujText;
end;
procedure TForm1.Button1Click(Sender: TObject);
var TT:TTest;
begin
TT:=TTest.Create;
TT.MujText.Create('A',10); //AAAAAAAAAA
BUtton1.Caption:=TT.MujText; // MujText je stále prázdný a je to správně
TT.Free;
end;
{ TTest }
function TTest.GetMujText: string;
begin
result:=FMujText;
end;
procedure TTest.SetMujText(const Value: string);
begin
FMujText := Value;
end;
end.
--- Konec kódu ---
hlucheucho:
Takže metodu sprintf má buňka stringgridu pro kočku. Použil jsem
--- Kód: ---Tabulka->Cells[j] [i] = FloatToStrF(val, ffExponent, 4, 2);
--- Konec kódu ---
V dokumentaci jsou chybně uvedeny konstanty jako sffEponent, sffGeneral... Nezbývá, než zase konstatovat: úroveň dokumentace sráží kvalitu produktu.
hu
zdenek:
Nápověda není vždy úplně ok, ale tohle je obecná vlastnost property. Je to trochu matoucí, především, když je typem u property nějaký objekt/record co poskytuje metody.
Navigace
[0] Seznam témat
Přejít na plnou verzi