13. november 2010 - 15:19Der er
11 kommentarer og 1 løsning
DYNAMISK LISTE
HEJ
DETTE ER EB IDE, JEGN HAR TÆNKT PÅ LÆNGE- VED IKKE OM DET ER MULIGT:
Du har en Delphi-form med et antal LABELS, et antal EDITS, et antal LISTBOXe osv.....
Hver enkelt Enhed (label, Edit, Listbox) har et navn, som er unikt for denne enhed (typisk enhed + et nummer). Til F.eks labels og Edit's er der ofte et tekstfelt (hhv. Caption og Text).
Du kan sætte dis Captions og text-felter dynamisk under program-kontrol eller sætte dem initialt med Object Inspector'en.
Min ide er om denne OBject Inspector "kunne erstattes af en INITIALAZATION rutine", som henter komponentens type (edit. labels etc) og erstatter CAPTIOn- OG/elelr TEXT-feltet med en dynamisk værdi hentet fra en initialiseringsfil (XML-typen).
jeg havde tænkt mig noget i stim med følgende (PSEUDOKODE):
For N := 0 to ANTAL-KOMPOENTER Do BEGIN FIND_KOMPONENT_TYPE; Skift Komponent-TEkstfelt til aktuelle Tekst; (* Text / CAPTION *) Set evt. andre attributter på valgte komponent; (* XM-bestemt *) END,
Fordelen vil være, at ved forskellige sprog-versioner kan jeg bare installere/vælge den pågældende INI-DK.XML, INI-US.XML, INI-SE.XML (osv) og så vil XML-parseren selv finde komponenten, finde ud af typen (her: caption / text), sææte CAPTION/ TEXT, sætte andre attributter (inkl. i XML-filen) og når den er færdig har jeg en hhv. DANSK, USA'sk (undskyld for denne), SVENSk eller NORSK (eller andre) udgave kørende. Programmet er jo ligeglad med labels-indholdet..
Ved at lægge alt tekst i en XML-fil er det nemmere at rette og håndtere (for mig - ihvertfald).
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Du kunne prøve at tage et kig på din DFM fil, hvis du sidder i Delphi kan du høreklike og vælge ViewAsText, så har du din "xml" af din form, dette kan du også lave selv i din kode.
Mht. flere sprog, understøtter delphi også det i de nyere versioner.
for x:=0 to form1.componentcount-1 do if form1.components[x] is Tedit then if (form1.components[x] as Tedit).name='edit1' then (form1.components[x] as Tedit).caption:='nådada';
Jeg har løst det på en anden måde. Når programmet kompileres med det rigtige flag (det er længe siden), så genereres der en fil med alle tekster. Filen indeholdt bl.a. alle tekster m. ID og den del blev linket ind i programmet.
Når programmet blev start, så blev en sprogtabel (en kolonne pr. sprog) opdateret så den indeholdt alle teksterne (og de records der ikke blev opdateret, blev slettet).
Derefter, stadig i programstart, blev sprogvalget hentet fra konfigurationen og i den del som loadede teksterne blev de erstattet med teksten fra den rette sprogkolonne. Jeg kan desværre ikke længere huske hvor vi hackede starten.
Jeg havde så en lille dialog hvor man kunne oversætte alle teksterne til de sprog der var kolonner til i sprogtabellen.
Hvis du er interesseret skal jeg gerne dykke ned i arkiverne og finde compilerflaget og den snip kode vi hackede programmet med.
... alternativt kan du lave alt tekst til resourcestrings og bruge Delphis indbyggede oversætter.
I øvrigt så tror jeg både din oprindelige løsning og den du går i gang med nu, er alt andet end anbefalelsesværdig. Hver dialog skal sættes op og vedligeholdes, og det bliver noget værre noget.
Har set på EXE-filen - ser godt ud. Men det med SOURCEN har jeg lidt problemer med . HJÆLP ??
Mit project har pt. 10 (muligvis maximeres til ca. 15 (18?) ) forme med tilhørende labels, edits, croupboxes, osv. osv. Ville det være "økonomisk" bedre at bruge GNU DXGettext ?
Min oprindelige ide var at lade hver forms INITIALIZATION rutine klare initialiseringen via XML ini-filen (inidk.xml - inise.xml osv) men det er endnu ikkr halt fastlagt.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.