Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Novi Delphi, prvi pod Embarcaderom

[es] :: Pascal / Delphi / Kylix :: Novi Delphi, prvi pod Embarcaderom

Strane: 1 2

[ Pregleda: 6911 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nemanja_666
Nemanja Tatic
Gradiska

Član broj: 116292
Poruke: 221
41.179.2.*



+19 Profil

icon Novi Delphi, prvi pod Embarcaderom23.08.2008. u 01:04 - pre 190 meseci
http://www.cio.com/article/print/445250

Bas se me zanima hoceli nastaviti razvijati Delphi u pravom smjeru ili ce je upropastiti.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom23.08.2008. u 07:17 - pre 190 meseci
Ima u ovoj temi par likova sa preview video materijalom.
 
Odgovor na temu

Nemanja_666
Nemanja Tatic
Gradiska

Član broj: 116292
Poruke: 221
41.179.2.*



+19 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom23.08.2008. u 16:09 - pre 190 meseci
tnx
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.sbb.rs.



Profil

icon Re: Novi Delphi, prvi pod Embarcaderom01.09.2008. u 10:08 - pre 190 meseci
Citat:
Nemanja_666http://www.cio.com/article/print/445250

Bas se me zanima hoceli nastaviti razvijati Delphi u pravom smjeru ili ce je upropastiti.


Ne u pravom, nego u savršenom smeru. :)

String više nije AnsiString, nego je to sada novi UnicodeString.

Code:

type
  string = UnicodeString;
  Char = WideChar;
  PChar = PWideChar;


Defult verzije funkcija su sada one sa W sufiksom umesto onih sa A, kao što je do sada bio slučaj.

Code:

function TextOut; external gdi32 name 'TextOutW';
function TextOutA; external gdi32 name 'TextOutA';
function TextOutW; external gdi32 name 'TextOutW';


Delphi 2009 po defaultu ima uključenu direktivu UNICODE, koju možete iskoristiti u svojim aplikacijama da bi proverili da li treba da koristite W ili A verziju neke funkcije.

Code:

{$IFNDEF UNICODE}
function GetLocaleInfo(Locale: Longint; LCType: Longint; lpLCData: PAnsiChar; cchData: Integer): Integer; stdcall;
  external kernel name 'GetLocaleInfoA';
{$ELSE}
function GetLocaleInfo(Locale: Longint; LCType: Longint; lpLCData: PWideChar; cchData: Integer): Integer; stdcall;
  external kernel name 'GetLocaleInfoW';
{$ENDIF}


Sve ovo obezbeđuje sasvim jednostavan "upgrade" vaših aplikacija da koriste Unicode.

Code:

procedure TForm1.FormPaint(Sender: TObject);
var
  s: string;
begin
  s := 'latinica + ćirilica'; // ćirilica je pisalo ćirilicom, ali mi je ES prebacio to u latinicu :((
  Canvas.TextOut(10, 10, s);
end;


Direktivu UNICODE nije moguće isključiti, kao ni mapiranje string=UnicodeString.

Ovo naravno znači da će i mnoge 3rd party komponente veoma brzo i lako postati unicode.

Pored ove najvažnije novine, ima ih još nekoliko.

TImage sada može po defaultu da prihvati png, gif, jpg, jpeg, bmp, ico, emf i wmf.

BuildConfigurations omogućava lak prelazak sa Debug na Release profil za komplajliranje. Moguće je dodati i svoje custom profile.


viking ®
 
Odgovor na temu

nikomak
Nikola Makić
Beograd

Član broj: 177053
Poruke: 65
*.eunet.rs.



+1 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom01.09.2008. u 18:23 - pre 190 meseci
Pozdrav svima !

Ima li neko novi Delphi instaliran ? :)
Veoma me raduje sto je unicode completely podrzan, ali sta je sa novim osobinama jezika ?
Mislim na Generics i anonimne metode. Koliko sam uspeo da shvatim, Generics bi trebalo da bude ekvivalent C++ template-ima
i da pruzi niz veoma interesantnih osobina. Zna li neko nesto vise o ovome ?

Hvala svima unapred na odgovorima !

TurboDispatchJumpAddressEnd
----
Knocka Fia
----
And so we meet, again in a different time
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom04.09.2008. u 10:30 - pre 190 meseci
Citat:
viking13: Ne u pravom, nego u savršenom smeru. :)

String više nije AnsiString, nego je to sada novi UnicodeString.

Code:

type
  string = UnicodeString;
  Char = WideChar;
  PChar = PWideChar;




Ti mora da se salis? 99% postojeceg koda se zasniva na string = AnsiString, char = AnsiChar i SizeOf(char) =1.

Probao sam nekoliko relativno popularnih biblioteka i komponenti. U principu, moze ih se navesti da se kompajliraju (neke cak prolaze i bez promena). Funkcionalnost je druga prica. Govorim o zavucenim greskama koje se ne vide compile time, pa cak ni run time u vidu exceptiona. Funkcije jednostavno daju lose razultate, sto je po meni najgora varijanta. Imam utisak da kompajler relativno dobro upozorava na potencijalna problematicna mesta, bar za standardne stvari gde se UnicodeString (sada samo string) pakuje u AnsiString i slicno.

Pisanje novih aplikacija svakako nije slozenije nego ranije, a Unicode podrska je veliki plus. Ostaje pitanje sta raditi sa ogromnom kolicinom postojeceg koda? Neke besplatne komponente i klase nisu osvezavane jos od D7, pa i ranije, ali su i dalje bile savrseno funkcionalne - sve do sada. Ne verujem da ce ljudi koji ih koriste pohriliti da predju na D2009.

Neverovatno je da nisu omogucili da se koristi stari nacin rada sa stringovima, makar kao opcija na nivou celog projekta. Druga mogucnost je bila da se ostavi string=AnsiString, a da se, na mestima gde je to bitno, provuce Unicode u vidu dodavanja overloaded metoda. Naravno, ovo je sve nagadjanje, pretpostavljam da su imali dobre tehnicke razloge da ne postupe tako. Ipak, ostaje tuzan utisak da ce D2009 moci da proizvede savrseno Unicodovane aplikacije koje ce morati da sacekaju malo po pitanju svih funkcionalnosti, van onoga sto se nudi out-of-the-box.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom04.09.2008. u 12:05 - pre 190 meseci
> Ti mora da se salis? 99% postojeceg koda se zasniva na string = AnsiString, char = AnsiChar i SizeOf(char) =1.

Nema tu problema, pre prelaska na D2009 uradiš replace all, string -> AnsiString, char -> AnsiChar, PChar -> PAnsiChar.

> Neverovatno je da nisu omogucili da se koristi stari nacin rada sa stringovima, makar kao opcija na nivou celog projekta. Druga
> mogucnost je bila da se ostavi string=AnsiString, a da se, na mestima gde je to bitno, provuce Unicode u vidu dodavanja overloaded metoda.

Čitav VCL je unicode, koriste se Unicode funkcije, window handlovi kontrola su Unicode, ne može se to isključiti/uključiti sa jednim switchom.
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom04.09.2008. u 13:50 - pre 190 meseci
Bojim se da stvari nisu tako jednostavne.

1) Taj Search/Replace bi morao da se radi rucno, sto nije zabavno ako govorimo o velikim bibliotekama.
2) Nije uvek moguce iz neposrednog konteksta zakljuciti kako treba da se postupi. Npr, kojeg tipa su elementi ovog skupa i kako raditi sa njima:
Code:
const CST_SOME_LETTERS = ['A'..'Z', 'a'..'z'];

3) Kao sto si napomenuo, sve VCL komponente sada vracaju (implicitno) UnicodeString za sve string properties. Sta se desava sa:
Code:
var aStream:TStringStream;
...
aStream := TStringStream.Create('');
aStream.Write(aBuffer, aCount);
// aStream.DataString[1] = ?


Naravno, za svaki slucaj kada je dostupan izvorni kod resenje se moze naci - u principu.

Problem je sto to nece biti ni blizu tako pravolinijski kako si naveo.
Ironija je u tome sto su Delphi (zapravo, Object Pascal) stringovi bili dobro dizajnirani od starta tako da su omogucili laku i elegantnu manipulaciju binarnim podacima. Na primer, cest je slucaj da su se stringovi koristili za formiranje binarnih polja prilikom implementacije razlicitih komunikacionih protokola. Takva resenja su cesto mnogo elegantnija nego rad sa dinamickim nizovima bajtova, ili sa TStream klasama. Having said that, problema u prelasku nece biti (ili ce ih biti mnogo manje) tamo gde je tip string koriscen iskljucivo za smestanje tekstualnih podataka.

Ovo je nesto sto su zapazile i firme koje se bave razvojem komponenti i biblioteka za Delphi. Njihov polozaj je dodatno otezan time sto moraju da zadrze kompatibilnost sa starim verzijama. Na prvu loptu: http://community.devexpress.co...s-support-for-tibur-243-n.aspx

Sto se tice opcionog iskljucivanja, cak i ako je ceo VCL unicode i ako su presli po defaultu na Wide WinAPI pozive - zasto je problem napraviti kompajlersku opciju npr. {$UNICODE}, tako da je u izvornom kodu izmedju {$UNICODE-} i {$UNICODE+} vaze stara pravila string=AnsiString, itd? Ako ti proturis novoj VCL komponenti AnsiString tamo gde ocekuje UnicodeString, prihvatice ga i napravice implicitnu konverziju (cak i bez warninga) zato sto se tu ne gube informacije. Mozda ce upozoravati kad prihvatas Unicode rezultate i smestas ih u AnsiString, ali to je podnosljivo.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom04.09.2008. u 14:23 - pre 190 meseci
> Taj Search/Replace bi morao da se radi rucno, sto nije zabavno ako govorimo o velikim bibliotekama.

Ima eksternih alata koji to rade a možda može i pomoću Delphi refactoring opcije.

> 2) Nije uvek moguce iz neposrednog konteksta zakljuciti kako treba da se postupi. Npr, kojeg tipa su elementi ovog skupa i kako raditi sa njima:
> const CST_SOME_LETTERS = ['A'..'Z', 'a'..'z'];

Osim ako nešto nisu menjali u implementaciji setova (maksimalno 256 elemenata), ovako deklarisan je set of AnsiChar.

> 3) Kao sto si napomenuo, sve VCL komponente sada vracaju (implicitno) UnicodeString za sve string properties. Sta se desava sa:
> var aStream:TStringStream;
> aStream := TStringStream.Create('');
> aStream.Write(aBuffer, aCount);

Nemam novi Delphi ne znam doista kako je sad deklarisan StringStream, možda je i dalje AnsiString a možda imaju dve klase za unicode i ansi.

> Sto se tice opcionog iskljucivanja, cak i ako je ceo VCL unicode i ako su presli po defaultu na Wide WinAPI pozive - zasto je problem
> napraviti kompajlersku opciju npr. {$UNICODE}, tako da je u izvornom kodu izmedju {$UNICODE-} i {$UNICODE+} vaze stara pravila
> string=AnsiString, itd?

Ne zaboravi na RTL, morali bi postojati dve verzije RTL .dcu fajlova, sve deklaracije bi morale biti duplirane itd. Win9x sistemi su i dalje u upotrebi ali sve manje (a i tu je D7 ili D2007 za njih) tako da je logicno fokusirati se na WinNT sisteme ge je Unicode logičan izbor. Pre ili kasnije prelazak je morao da se obavi, još bi više boleo da su čekali recimo još 5 godina.
Inače ne znam kako su implementirali sada Unicode da li su napravili interni WideString ili Windowsov kao u proslim verzijama. Do sada WideString nije bio efikasan poput AnsiStringa, nije bilo ni reference countinga, veće zauzeće memorije, sporiji itd.
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom04.09.2008. u 15:10 - pre 190 meseci
Vidis, nisam probao refactoring posto sam ga uklonio odmah po instalaciji. Ako tu ubace neki helper za prelazak, to bi bilo odlicno.

Sto se tice TStringStream-a, to sam odabrao kao ilustrativni primer.. Problem postoji sa bilo kojim property-jem koji vraca string. Npr, TObject.Name je Unicode, sto radja probleme na svim mestima gde se ranije tretirao kao AnsiString, pogotovo ako su koriscene konstrukcije kao sto je direktno indeksiranje po nizu, direktno pisanje i citanje, itd. Poenta primera je bila da programer moze da promeni string -> AnsiString svuda u svojim klasama i u komponentama za koje ima source, ali ostaje pitanje sta raditi sa property-jima i rezultatima funkcija iz ugradjenih klasa koji su se preko noci pretvorili u Unicode.

Nisam mislio da prave odvojene dcu-ove, samo da omoguce kompajliranje korisnickog koda tako da u nekim segmentima vazi Var x:string <=> Var x:AnsiString. Ako hoces, nesto kao redefinicija tipa u ogranicenoj oblasti. I tako su sa genericima poceli ozbiljno da flertuju sa code-substitution programiranjem, pa mogu da se otvore i za jos jednu takvu prekompajlersku opciju ;) To bi ubrzalo prelazak utoliko sto bi se odmah resilo pitanje definicije tipova korisnickih promenljivih, pa se onda moze skoncentrisati na probleme u povezivanju sa VCL Unicode property-jima i parametrima. Naravno, kao konacno resenje trebalo bi prebaciti sve na AnsiString tamo gde je prikladno.

Mislim da sada imaju reference counting za WideString, ali ne znam koliko su operacije optimizovane.

IMHO i ovako su dugo cekali sa Unicode podrskom... Valjda sam se zato nadao nekom "blazem" prelazu. Doduse, za 5 godina ce verovatno sve ovo biti ancient history i o promeni tipa string cemo razmisljati otprilike onako kako se danas secamo prelaska sa 16 bita na 32. Btw, opet su odlozili podrsku za 64-bitni kompajler. Sigh.
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom04.09.2008. u 16:52 - pre 190 meseci
> Sto se tice TStringStream-a, to sam odabrao kao ilustrativni primer.. Problem postoji sa bilo kojim property-jem koji vraca string. Npr, TObject.Name je
> Unicode, sto radja probleme na svim mestima gde se ranije tretirao kao AnsiString, pogotovo ako su koriscene konstrukcije kao sto
> je direktno indeksiranje po nizu, direktno pisanje i citanje, itd.

Code:

for i := 1 to Lenth(Name) do
  if Name[i] = 'a' then
     Name[i] := 'b';


Ovo će raditi svejedno da li Name Ansi ili WideString, verovatno te ne razumem jer misliš na nešto drugo.

> Nisam mislio da prave odvojene dcu-ove, samo da omoguce kompajliranje korisnickog koda tako da u nekim
> segmentima vazi Var x:string <=> Var x:AnsiString. Ako hoces, nesto kao redefinicija tipa u ogranicenoj oblasti.

To bi bilo samo odložilo prelazak a tražio bi ubacivanje trikova u kompajler, po meni ako treba nešto da se uradi bolje uraditi odmah ili ako će da boli, bolje da boli odmah ;) Inače seti se prelaska sa Delphi 1.6 na Delphi 2, slični problemi i sve je dobro prošlo.
Pretpostavljam da je CodeGear i pripremio neko detaljno transition uputstvo.

> Btw, opet su odlozili podrsku za 64-bitni kompajler. Sigh.

Nisam čuo, beše je trebalo iduće godine a kad je sad?
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.adsl-1.sezampro.yu.



+40 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom04.09.2008. u 20:38 - pre 190 meseci
Citat:
savkic:
Code:

for i := 1 to Lenth(Name) do
  if Name[i] = 'a' then
     Name[i] := 'b';


Ovo će raditi svejedno da li Name Ansi ili WideString, verovatno te ne razumem jer misliš na nešto drugo.


Kad poredis sa literalima, verovatno ce raditi. Kao sto rekoh, tamo gde je string koriscen u tekstualne svrhe nece biti problema. Medjutim,
Code:

...
if Ord(Name[i])=X then...


je vec upitno, dok je recimo
Code:

var TcpClient1: TTcpClient;
...
TcpClient1.Sendln(#$00+Self.Name+#$FF); //slanje nekog VCL stringa preko mreze sa delimitirima 0x00 i 0xFF


kompletan haos. Indy ima vrlo slicnu funkciju, koliko sam video i dalje prihvata string. Za TTcpClient iz Unit Sockets nisam 100% siguran u kakvom je stanju u D2009, tj da li je prepravljena da ocekuje Ansi ili ne. U D2006 je "function TBaseSocket.Sendln(s: string; const eol: string): Integer;".

Naravno, medjukonverzija u AnsiString resava problem u vecini slucajeva, ali to znaci da nije dovoljno samo pretraga i zamena po kljucnim recima string i char.

Slazem se da su trikovi generalno losa ideja. Sa druge strane, pitanje je koliko ce ova neophodna prilagodjavanja uticati na brzinu prihvatanja D2009, posle D2007 kojeg je zajednica dobro docekala. Nadam se da necemo videti neki finansijski pad koji bi ponukao Embracadero, tj, zajednickog im taticu TCB da ih se resi na brzinu dok jos moze da zaradi...

Za 64 bit roadmap i dalje tvrdi 2009, ali, sa druge strane, D2009 je trebao da izadje u 2008, tako da ocekujem min 1 godinu kasnjenja. Za buducnost su najavili cross-compile podrsku za druge platforme... Da li da se nadam ozivljavanju Kylixa? :)
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom05.09.2008. u 01:09 - pre 190 meseci

Code:

if Ord(Name[i])=X then...


je vec upitno, dok je recimo

Radiće i to, Ako je Name npr. 'ABA' biće 65 66 65.

> TcpClient1.Sendln(#$00+Self.Name+#$FF); //slanje nekog VCL stringa preko mreze sa delimitirima 0x00 i 0xFF

Pa sad to je već pitanje kako je osmišljen protokol, ja se recimo uvek trudim da koristim binarni nikad tekstualni. Mada i ovako bi valjda trebalo da radi, samo što će biti poslato sa dvaput više bajtova.

> Za TTcpClient iz Unit Sockets nisam 100% siguran u kakvom je stanju u D2009, tj da li je prepravljena da ocekuje Ansi ili ne.
> U D2006 je "function TBaseSocket.Sendln(s: string; const eol: string): Integer;".

Koliko sam ja ispratio najave uz D2009 će se isporučivati posebna verzija Indy prilagođena Unicodu.

> D2009 je trebao da izadje u 2008,

Pa izašao je, samo se čekaju fizičke isporuke paketa.


 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.rcub.bg.ac.yu.



+40 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom05.09.2008. u 09:03 - pre 190 meseci
Warning: Long post

Umph, izgleda da se ne razumemo :)

Probaj ovo:
Code:
var
  aSomePropertyReturningAnsi : AnsiString;
  aSomePropertyReturningWide : WideString;

begin
  // Set the values
  aSomePropertyReturningAnsi := #$FF#$FE#$41#$00#$42#$00#$43#$00;
  aSomePropertyReturningWide := #$FF#$FE#$41#$00#$42#$00#$43#$00;

  // Show the values of each
  ShowMessage('aSomePropertyReturningAnsi[1] = '+IntToStr(Ord(aSomePropertyReturningAnsi[1])));    // = 255
  ShowMessage('aSomePropertyReturningWide[1] = '+IntToStr(Ord(aSomePropertyReturningWide[1])));  // = 729
end;


Mozes da koristis i funkcije umesto ove dve promenljive, kao i property-je.
Property SomeStringProperty:string je do D2009 vracao AnsiString, a u D2009 vraca Unicode. To znaci da ces, ako inicijalizujes string property na ovaj nacin (da, ruzno je, ali se masovno koristi, kao i jos ruznije varijante sa uzimanjem pointera na pocetak stringa i citanje/pisanje po istom) dobijati razlicite rezultate kasnije, u zavisnosti od toga da li koristis D2009 ili ranije. Kada je spomenuti property deo VCL klase verovatno ces morati da dodajes konverziju rezultata u AnsiString pre daljeg koriscenja. Nije problem kada je u tvom kodu, moze da bude vrlo zapetljano ako je u tudjem.

Sa mreznim protokolima upravo i jeste problem oko toga sta se salje...
Cesto nemas kontrolu nad samim protokolom, tj povezujes se na server ciji je protokol vec definisan standardima ili nekim proprietary dokumentima. U tom smislu, vrlo je bitno da na drugu stranu stignu tacno odredjeni bajtovi tacno odredjenim redom, cak i kad prenosis tekst.

Evo, skinuh sad development snapshot za Indy 10 od sinoc sa http://indy.fulgan.com/ZIP/ ..
1) {$IFDEF UNICODE} se pojavljuje tu i tamo u kodu, koliko mogu da vidim, iskljucivo za izbor izmedju *A i *W WinAPI poziva.
2) Vidim da slanje stringa ima i parametar za encoding, sto je pozitivno, mada ostatak koda ne izgleda bas uskladjeno sa D2009. Prica ide preko
Code:

function ToBytes(const AValue: string; const ALength: Integer; const AIndex: Integer = 1;
  const AEncoding: TIdEncoding = en7Bit): TIdBytes; overload;
var
  LLength: Integer;
begin
  EIdException.IfTrue(AEncoding = enDefault, 'No encoding specified.'); {do not localize}
  LLength := IndyLength(AValue, ALength, AIndex);
  if LLength > 0 then
  begin
    if AEncoding = enUTF8 then begin
      Result := StringToUTF8Bytes(AValue, AIndex, LLength);
    end else
    begin
      // For VCL we just do a byte to byte copy with no translation. VCL uses ANSI or MBCS.
      // With MBCS we still map 1:1
      SetLength(Result, LLength);
      CopyTIdString(AValue, AIndex, Result, 0, LLength);
    end;
  end else begin
    SetLength(Result, 0);
  end;
end;


sto nas dovodi do

Code:

procedure CopyTIdString(const ASource: String; const ASourceIndex: Integer;
  var VDest: TIdBytes; const ADestIndex: Integer; const ALength: Integer = -1); overload;
{$IFDEF USEINLINE}inline;{$ENDIF}
  var
  LLength: Integer;
begin
  LLength := IndyLength(ASource, ALength, ASourceIndex);
  if LLength > 0 then
  begin
    // TODO: support UTF-8
    {$IFDEF DOTNET}
    GetEncoder(en7Bit).GetBytes(ASource, ASourceIndex-1, LLength, VDest, ADestIndex);
    {$ELSE}
    Move(ASource[ASourceIndex], VDest[ADestIndex], LLength);
    {$ENDIF}
  end;
end;


i

Code:

function IndyLength(const ABuffer: String; const ALength: Integer = -1; const AIndex: Integer = 1): Integer;
{$IFDEF USEINLINE}inline;{$ENDIF}
var
  LAvailable: Integer;
begin
  Assert(AIndex >= 1);
  LAvailable := IndyMax(Length(ABuffer)-AIndex+1, 0);
  if ALength < 0 then begin
    Result := LAvailable;
  end else begin
    Result := IndyMin(LAvailable, ALength);
  end;
end;


iz cega bih rekao da ovo nece bas raditi kako treba za Unicode. :(

 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.dynamic.sbb.rs.



Profil

icon Re: Novi Delphi, prvi pod Embarcaderom07.09.2008. u 15:11 - pre 190 meseci
Citat:
0rc: Ti mora da se salis? 99% postojeceg koda se zasniva na string = AnsiString, char = AnsiChar i SizeOf(char) =1.


Sa ovim ne bi trebalo da ima problema ako je korišten string, char i ako umesto SizeOf(char) ne piše 1 u kodu. "Predviđanje veličine" nekog tipa odnosno dirketno postavljanje vrednosti umesto korišćenja SizeOf funkcije je loša programerska praksa.

Citat:
0rc: Neverovatno je da nisu omogucili da se koristi stari nacin rada sa stringovima, makar kao opcija na nivou celog projekta. Druga mogucnost je bila da se ostavi string=AnsiString, a da se, na mestima gde je to bitno, provuce Unicode u vidu dodavanja overloaded metoda. Naravno, ovo je sve nagadjanje, pretpostavljam da su imali dobre tehnicke razloge da ne postupe tako. Ipak, ostaje tuzan utisak da ce D2009 moci da proizvede savrseno Unicodovane aplikacije koje ce morati da sacekaju malo po pitanju svih funkcionalnosti, van onoga sto se nudi out-of-the-box.


Razlog koji je Allen Bauer naveo zasto nema switcha je "lak i jednostavna upgrade aplikacija na unicode bez problema".

Ja sam tu izjavu sa njegovog bloga parafrazirao i preneo je ovde.
viking ®
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.dynamic.sbb.rs.



Profil

icon Re: Novi Delphi, prvi pod Embarcaderom07.09.2008. u 15:22 - pre 190 meseci
Citat:
savkic:Ima eksternih alata koji to rade a možda može i pomoću Delphi refactoring opcije.


Pravi odgovor. Refaktoring rulz.

Citat:
savkic:
Nemam novi Delphi ne znam doista kako je sad deklarisan StringStream, možda je i dalje AnsiString a možda imaju dve klase za unicode i ansi.


Ne mogu trenutno da proverim. Ali 99% je tako sa sve {$IFNDEF UNICODE}.

Citat:
savkic:
Inače ne znam kako su implementirali sada Unicode da li su napravili interni WideString ili Windowsov kao u proslim verzijama. Do sada WideString nije bio efikasan poput AnsiStringa, nije bilo ni reference countinga, veće zauzeće memorije, sporiji itd.


UnicodeString za razliku od WideStringa ima reference count.
viking ®
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.dynamic.sbb.rs.



Profil

icon Re: Novi Delphi, prvi pod Embarcaderom07.09.2008. u 15:51 - pre 190 meseci
Citat:
0rc: Vidis, nisam probao refactoring posto sam ga uklonio odmah po instalaciji. Ako tu ubace neki helper za prelazak, to bi bilo odlicno.


To što si sklonio refactoring je jedna od tvojih najvećih grešaka u životu. Mene je spasao sati i sati, da ne kažem dana, ručnog menjanja koda.

Citat:
0rc: Sto se tice TStringStream-a, to sam odabrao kao ilustrativni primer.. Problem postoji sa bilo kojim property-jem koji vraca string. Npr, TObject.Name je Unicode, sto radja probleme na svim mestima gde se ranije tretirao kao AnsiString, pogotovo ako su koriscene konstrukcije kao sto je direktno indeksiranje po nizu, direktno pisanje i citanje, itd. Poenta primera je bila da programer moze da promeni string -> AnsiString svuda u svojim klasama i u komponentama za koje ima source, ali ostaje pitanje sta raditi sa property-jima i rezultatima funkcija iz ugradjenih klasa koji su se preko noci pretvorili u Unicode.

Nisam mislio da prave odvojene dcu-ove, samo da omoguce kompajliranje korisnickog koda tako da u nekim segmentima vazi Var x:string <=> Var x:AnsiString. Ako hoces, nesto kao redefinicija tipa u ogranicenoj oblasti. I tako su sa genericima poceli ozbiljno da flertuju sa code-substitution programiranjem, pa mogu da se otvore i za jos jednu takvu prekompajlersku opciju ;) To bi ubrzalo prelazak utoliko sto bi se odmah resilo pitanje definicije tipova korisnickih promenljivih, pa se onda moze skoncentrisati na probleme u povezivanju sa VCL Unicode property-jima i parametrima. Naravno, kao konacno resenje trebalo bi prebaciti sve na AnsiString tamo gde je prikladno.


Ja Code Gear filozofiju vidim otprilike na sledeći način:

Svi u svoje komponente treba da ubace {$IFNDEF UNICODE} i da naprave 2 verzije svake funkcije. Na taj način će iste komponente raditi ispravno i u novom i u starijim izdanjima Delphija.

Ukoliko sve komponente koje smo koristili rade na ovaj način i ukoliko nigde u svom kodu nismo petljali sa direktnim pogđanjem veličine tipa i ako smo koristili standardne tipove (string, char, pchar....), nismo miksovali AnsiString i WideString, TNTWideStringList i StringList... naše aplikacije će momentalno biti kompatibilne.
viking ®
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.dynamic.sbb.rs.



Profil

icon Re: Novi Delphi, prvi pod Embarcaderom07.09.2008. u 16:11 - pre 190 meseci
Citat:

iz cega bih rekao da ovo nece bas raditi kako treba za Unicode. :(


Nije mi jasno kako si ovo zaključio.

Svuda koristi string (odnosno UnicodeString) nigde ne koristi AnsiString direktno, nigde ne nagadja da je sizeof(char) = 1...

Znači sve ovo radi bez problema kao Unicode.
viking ®
 
Odgovor na temu

0rc
BG

Član broj: 151321
Poruke: 107
*.adsl-a-1.sezampro.yu.



+40 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom07.09.2008. u 19:08 - pre 190 meseci
Citat:
viking13: Nije mi jasno kako si ovo zaključio.

Svuda koristi string (odnosno UnicodeString) nigde ne koristi AnsiString direktno, nigde ne nagadja da je sizeof(char) = 1...

Znači sve ovo radi bez problema kao Unicode.


Code:
Move(ASource[ASourceIndex], VDest[ADestIndex], LLength);
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Novi Delphi, prvi pod Embarcaderom08.09.2008. u 13:02 - pre 190 meseci
Evo i nekoliko linkova sa novostima koji su uključeni u Delphi IDE, VCL i jezik od D7 (ne uključuju D2009).

http://dn.codegear.com/article/34323
http://dn.codegear.com/article/34325
http://dn.codegear.com/article/34324
http://www.stevetrefethen.com/...nhancementsSinceDelphi7D7.aspx

Rezime novih opcija u D2009.
http://www.codegear.com/products/delphi/win32/whats-new/
http://www.codegear.com/articl.../38548/Delphi2009Datasheet.pdf
http://www.codegear.com/articl...48/Delphi2009FeatureMatrix.pdf
http://www.codegear.com/articl...images/38548/Delphi2009FAQ.pdf
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Novi Delphi, prvi pod Embarcaderom

Strane: 1 2

[ Pregleda: 6911 | Odgovora: 28 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.