Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Nå blei det litt feil igjen! Jeg skulle ha en liten oversikt.

Det er en form, Form5, med 8 RadioButton's. Og de skal gjøre sånn at bakgrunnen til form1 skiftes! Men når jeg skal prøvekjøre, kommer det en feil!

[Error] Unit5.pas(53): Undeclared identifier: 'image2'
Det er mange sånne, siden det er mange som peker dit!
Lenke til kommentar
Det Gikk! JEG ELSKER DEG! Endelig!

 

:oops: Ja, endelig sier jeg også. Har jobbet lenge for din kjærlighet, og nå, endelig.... :oops:

 

Et tips til deg. Alle komponenter, inkludert forms har en property som heter 'Name'. Den er litt kjekk....

 

Forsøk å navngi alle komponentene dine med fornuftige navn. Prefix med type komponent (frm for forms, img for images, ed for alt av edit, btn for alt av knapper osv) og avslutt med hensikten med komponenten.

 

Eksempler:

frmMain - hovedvinduet ditt.

frmSkinSelector - vindu for valg av skin

frmAbout - vindu med informasjon om deg og produktet

btnSkin1, evnt rbSkin1 - første radiobutton for valg av skin

btnSkin2, evnt rbSkin2 - andre.... osv

imgBackground - TImage-komponenten for å vise bakgrunnen

 

osv

osv

 

Da blir det mye, mye, masse mye, enklere å lese sin egen kode og forstå hvilke objekter/properties du skal manipulere.

 

frmMain.imgBackground.Image.LoadFromFile( ) er bra mye lettere å forstå enn

Form3.Image2.Image....

 

-Vegar

Lenke til kommentar

Dere fortjener begge uendelig med takknemlighet! Men nå kommer det virkelige problemet, jeg skal ha det sånn at alt blir lagra i en .dll fil, sånn at man slepper å loade en valgfri skin hver gang, og også velge en bakgrunn hver gang! Lar det seg gjøre på en någenlunde enkel måte?

Lenke til kommentar
Dere fortjener begge uendelig med takknemlighet! Men nå kommer det virkelige problemet, jeg skal ha det sånn at alt blir lagra i en .dll fil, sånn at man slepper å loade en valgfri skin hver gang, og også velge en bakgrunn hver gang! Lar det seg gjøre på en någenlunde enkel måte?

 

Ja, men nei...

 

Det er meningen at brukere skal kunne lage egne skinns, er det ikke? Hvordan skal de få laget en dll?

 

Ta heller å la brukeren lagre oppsett og så velge et default-oppsett som alltid benyttes når man starter programmet. Fila du lagrer oppsettet til kan være en ini-fil. De er lette å jobbe med. Da kan du ha en fil som heter 'skins.ini', og den kan f.eks. se så her ut:

 

[skin01]

Navn='Burners Favoritt'

Bakgrunn='c:bildersuperbabe.jpg'

NoeAnnet='Ett eller annet som måtte være interessant å ta vare på'

 

[skin02]

Navn=......

 

Du forstår sikkert tegninga. Slå opp i hjelpa på TIniFile og les litt om bruken av inifiler så er jeg sikker på at du får det til.

 

-Vegar

Lenke til kommentar

du lager en post i .ini fila som f.eks heter CurrentSkin, noe alá

 

CurrentSkin='default'

til å begynne med, når så bruker endrer skin så blir den da f.eks til:

CurrentSkin='Skin03'

 

når applikasjonen åpnes skal den da loade det skinnet som står i CurrentSkin

Lenke til kommentar

procedure TForm1.FormCreate(Sender: TObject);   // start prosedyre

var

starttid: real;   

begin

starttid := gettickcount;

while gettickcount < starttid+2000 do;

form4.hide;

image1.Visible := false;

image6.Visible := false;

image2.visible := false;

image3.Visible := false;

image5.visible := false;

image7.Visible := false;

image4.visible := false;

end;

Dette er min start prosedyre, det er sikkert en lettere måte å gjøre alt på, for når jeg skifter skin, disabler jeg alle de andre først! Men det blir vel som å bruke hagle på spurv?

Lenke til kommentar
procedure TForm1.FormCreate(Sender: TObject);   // start prosedyre

var

starttid: real;   

begin

starttid := gettickcount;

while gettickcount < starttid+2000 do;

form4.hide;

image1.Visible := false;

image6.Visible := false;

image2.visible := false;

image3.Visible := false;

image5.visible := false;

image7.Visible := false;

image4.visible := false;

end;

Dette er min start prosedyre, det er sikkert en lettere måte å gjøre alt på, for når jeg skifter skin, disabler jeg alle de andre først! Men det blir vel som å bruke hagle på spurv?

 

Hum... For det første er det vel ikke så gunstig å bruke real sammen med GetTickCount? real er et komma-tall, og GetTickCount returnerer et heltall...

 

Hva er alle imagex-komponentene til? Har du en TImage for hvert skin?

 

-Vegar

Lenke til kommentar

Det starttid greiene leste jeg i ei bok!

Ja jeg har et komponent for hvert skin, man kan velge mellom 7 skins som er i spilleren og et du velger selv.... Bedre måter?

Men tilbake til .ini greiene, jeg veit ikke hvordan jeg skal gjøre alt dette! Jeg leste i help fila, men fant ikke noe som ga meg noen svar!

Lenke til kommentar
Jeg ville foretrekke xml filer... etter min mening er ini filer gammel dags, men det skal fungere like bra.

 

xml er en gedigen overkill, men selvfølgelig mer i vinden og mye mer fancy. Jobben gjøres mye lettere med inifiler.

 

Når det gjelder en komponent pr. skin skulle jeg tro det holdt lenge med en komponent. Du viser vel aldri mere enn ett skin av gangen uansett? Velger man skin nr. 1 laster du bilde nr. 1 inn i den ene TImage-komponenten. Velger man skin nr. 4 laster du bilde nr. 4 inn i den samme TImage-komponenten. Tror ikke det skulle være så vanskelig. Fordelen er mindre kode og mindre minne forbruk.

 

-Vegar

Lenke til kommentar
(Klipp...)

Jeg ville foretrekke xml filer... etter min mening er ini filer gammel dags, men det skal fungere like bra.

 

Hvorfor skulle ini-filer være gammeldags? Og hvorfor skulle man foretrekke xml-filer istedenfor ini-filer hvis det ikke er behov for XML ?

Lenke til kommentar

xml er en gedigen overkill, men selvfølgelig mer i vinden og mye mer fancy. Jobben gjøres mye lettere med inifiler.

 

Det skal være like lett med xml som ini filer dersom man vet åssen en skal håndtere det... :)

 

Det blir vel nesten som å se at det er like lett med lastebil som med golf når man skal på handletur i sentrum - bare man vet å håndtere det.

 

Poenget er at inifil-formatet håndteres direkte av operativsystemet og av delphi. xml er det litt værre med. Self kan du fylle opp en TStringList med xml-kode, lagre denne til fil og lese den inn igjen, men hva er poenget? For å få hentet ut verdiene igjen må du ha en parser, eller du kan sitte å plukke selv.

 

Nei, hold deg til TMemIniFile så lenge den har funksjonalitet nok. Har du store datamengder med kompliserte regler for gyldig data og gjerne med behov for å utveksle data med andre programmer osv, ja så finn deg en god xml-parser og tur i vei.

 

-Vegar

Lenke til kommentar


//Henter x element til x xml

function XMLElementVal(fullsti: string; element: string): shortString; stdcall;

var

 oXMLDoc: IXMLDomDocument;

 ElemList: IXMLDomNodeList;

 i: integer;

begin

try

  oXMLDoc := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument;

  oXMLDoc.load(fullsti);

  ElemList := oXMLDoc.getElementsByTagName(element);

  for i := 0 to ElemList.length -1 do

    Result := ElemList.item[i].text

except

 XMLFeil; //feilet ved oppretting av XMLDOM

end;

end;

 

Enkel kode for å hente ut et element verdi fra en xml fil... og manipulere på det..

 

Dropp det med TStringList og sånt...

Lenke til kommentar

Ja, det er adskillig lettere. Og mye mindre overhead, både i programmet som skal lese initieringsdata, og i selve datafila. XML er greit til sitt bruk når det gjelder DOM og standardiserte snitt mot store datamengder på tvers av miljøer, og i så fall ofte en nødvendighet. "Skins" av denne typen som i det opprinnelige innlegget bør det holde med en ini-fil.

 

Burner89: Deklarér Start som Integer og ikke som Real. GetTickCount er et heltall og ikke et flyttall. Du mister bare oppløsningen hvis antall ticks blir stor nok. En Real vil slå over på å bruke 10-er eksponent før eller siden, og da får du trøbbel med programmet ditt.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...