Autor Téma: UnicodeString.sprintf(...) - nepochopitelné chování  (Přečteno 6264 krát)

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Ahoj

když udělám:
Kód: [Vybrat]
UnicodeString us;
float val;
TStringGrid *Tabulka;

us.sprintf(L"%e", val);
Tabulka->Cells[j] [i] = us;
vše funguje normálně. K mému překvapení
Kód: [Vybrat]
float val;
TStringGrid *Tabulka;

Tabulka->Cells[j] [i].sprintf(L"%e", val);
nefunguje, buňka je prázdná. Proč?

C++ Builder XE5

hu

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 142
  • Karma: 9
Re:UnicodeString.sprintf(...) - nepochopitelné chování
« Odpověď #1 kdy: 29-06-2015, 18:05:24 »
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: [Vybrat]
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.
« Poslední změna: 29-06-2015, 18:14:35 od zdenek »

Offline hlucheucho

  • Plnoletý
  • ***
  • Příspěvků: 196
  • Karma: 2
Re:UnicodeString.sprintf(...) - nepochopitelné chování
« Odpověď #2 kdy: 30-06-2015, 10:37:06 »
Takže metodu sprintf má buňka stringgridu pro kočku. Použil jsem
Kód: [Vybrat]
Tabulka->Cells[j] [i] = FloatToStrF(val, ffExponent, 4, 2);V dokumentaci jsou chybně uvedeny konstanty jako sffEponent, sffGeneral... Nezbývá, než zase konstatovat: úroveň dokumentace sráží kvalitu produktu.

hu

Offline zdenek

  • Plnoletý
  • ***
  • Příspěvků: 142
  • Karma: 9
Re:UnicodeString.sprintf(...) - nepochopitelné chování
« Odpověď #3 kdy: 30-06-2015, 10:54:00 »
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.