Forum Delphi.cz

C a C++ => Obecné => Téma založeno: hlucheucho 29-06-2015, 17:17:03

Název: UnicodeString.sprintf(...) - nepochopitelné chování
Přispěvatel: hlucheucho 29-06-2015, 17:17:03
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
Název: Re:UnicodeString.sprintf(...) - nepochopitelné chování
Přispěvatel: zdenek 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.
Název: Re:UnicodeString.sprintf(...) - nepochopitelné chování
Přispěvatel: hlucheucho 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
Název: Re:UnicodeString.sprintf(...) - nepochopitelné chování
Přispěvatel: zdenek 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.