08. juni 2006 - 18:47Der er
24 kommentarer og 1 løsning
gemme image til næste gang programmet startes
jeg har følgende kode:
if op.Execute then Image1.Picture.LoadFromFile(op.FileName); // op er TOpenPictureDialog if Checkbox1.Checked then kvitering.QRImage1.Picture := image1.picture;
det jeg er ude efter er at når det valgte billede er valgt, så skal programmet hente den automatisk hver gang checkbox1 er checked men uden at bruge op.execute
men den valgte logo.gif kunne også hedde noget andet - logo.jpg osv...
hvordan kan jeg gemme det valgte billede så når programmet startes næste gang så bliver det valgte billede vist via ovenstående kode?
alle indstillinger i checkbox gemmer jeg i en ini fil - det er på plads.
Det optimale vil være at når "op" køres og man vælger et billede så kopieres det til et underbibliotek i biblioteket hvor *. exe filen er - og alle indstillinger gemmes så når programmet køres bliver billedet hentet og vist.
synes det er lidt svært at formulere men bær over med mig og spørg endelig hvis i er i tvivl om hvad jeg mener. lige en beskrivelse af programmet:
Man skal med programmet kunne designe sin egen kvittering i en light udgave
i design vinduet vælges det billede(logo) som skal være i kvittering(qrrapport) en label under billedet bekriver firmaet
3 labels (ude til højre i qrrapport) firmanavn adresse postnr by 6 checkbox når de er checked vises den tekst fra 6 edit i qrrapport
Hvis jeg forstår dig ret, kunne du oprette en undermappe, som du kopierede det valgte logo til. I din ini-fil laver du en nøgle, der hedder logo og en key, hvor du skriver navnet på logofilen. Hvis Checkbo1 er markeret, indlæser du filen.
Man kunne også blot gemme navnet på billedet i inifilen. Du kender navnet (op.FileName), så det er bare at gemme det navn i inifilen. Når du så vil vise billedet er det bare at lave en Image1.Picture.LoadFromFile(FileNameFraIniFile);
Synes godt om
Slettet bruger
09. juni 2006 - 13:30#7
hvordan gemmer man navnet på billedet i en inifile?
Jeg har ikke lige Delphi her ved mig, men jeg går ud fra at du bruger TIniFile klassen i forvejen, ikke? Så skriver du bare noget med Ini.WriteString('sektionnavn', 'identnavn', op.FileName); Altså på samme måde som du skrive de andre ting i din inifil.
Her er et par eksempler på at skrive til og læse fra en ini-fil. Eksemplet er hentet fra Delphis indbyggede hjælpefunktion:
procedure TForm1.Button1Click(Sender: TObject);
var MyIniFile: TIniFile; begin MyIniFile := TIniFile.Create('myapp.ini'); Memo1.Clear; MyIniFile.ReadSectionValues('Transfer', Memo1.Lines); if Memo1.Lines.Values['Title1'] <> 'Picture Painter' then MyIniFile.WriteString('Transfer', 'Title1', 'Picture Painter'); MyIniFile.Free; end;
procedure TForm1.Button2Click(Sender: TObject);
var MyIniFile: TIniFile; begin
MyIniFile := TIniFile.Create('myapp.ini');
{ if the entry wasn’t there before, delete it now } if Memo1.Lines.Values['Title1'] = '' then MyIniFile.DeleteKey('Transfer', 'Title1') { otherwise, restore the old value } else MyIniFile.WriteString('Transfer', 'Title1', Memo1.Lines.Values['Title1']); MyIniFile.Free; end;
Synes godt om
Slettet bruger
10. juni 2006 - 15:46#10
er der ikke en anden måde at definere 2 grafik formater på logo.jpg logo.gif end at bruge ini files
Synes godt om
Slettet bruger
11. juni 2006 - 00:41#11
kan ikke få det til at virke er det ikke getnamepath der skal bruges?
den opretter godnok settings.ini //gem [Settings] image1=TPicture
Du blander tingene sammen ;-) Grafikformatet har intet at gøre med ini-filen. Ini-filen er blot et sted, hvor du gemmer dine data, når programmet er slukket. Du kan også gemme dine data i registry. Så vidt jeg ved, anbefaler Microsoft dog, at man gemmer sine data i en ini-fil. Tilbage til dit problem. Du vil gerne ha' at folk kan vælge et image til deres kvittering. De skal selvfølgelig kun kunne vælge et format, som din Imagebox understøtter. Når de har valgt et image, uploader du det i din Imagebox. Samtdig kopierer du en kopi af imagedet til en programmappe, så du også har det næste gang programmet startes, selv om brugeren har slettet det fra den oprindelige placering. Til sidst "noterer" du navnet på filen i din ini-fil, så du kan indlæse billedet næste gang kvitteringen vises på skærmen. Hvis der er dele af denne process du mangler hjælp til, så sig til. Men jeg vil ikke lave programmet for dig.
Synes godt om
Slettet bruger
11. juni 2006 - 11:26#13
nej man lærer ikke ved at de andre laver programmet,
jeg ved godt at grafik formatet ikke kan skrives i ini filen men det kan stien ned til billedet som skal loades ved readstring
det er stort set det eneste problem jeg har....
har leget lidt med ini filer, men kan ikke få stien til billedet skrevet i ini filen
OK, inden jeg sender lidt hjælp, vil jeg gerne have nogle få oplysninger 1) Hvilken billedkontainer bruger du? 2) Hvilke grafikformatet tillader du? 2) Kopierer du billedet til en mappe og hvis ja, hvad er navnet på mappen?
Synes godt om
Slettet bruger
11. juni 2006 - 12:03#15
1: Timage 2: billeder formater *.gif og *.jpg 3: nej
Synes godt om
Slettet bruger
11. juni 2006 - 23:50#16
her er hvad jeg har nørklet med.. gem kører uden problemer men load giver en acces error procedure TForm1.Button2Click(Sender: TObject); var IniFile : TIniFile; begin //save IniFile := TIniFile.create(ExtractFilePath(ParamStr(0))+'settings.ini'); iniFile.WriteString('Settings','Image1.Picture','c:\temp\logo.gif'); end;
procedure TForm1.Button3Click(Sender: TObject); var //load IniFile : TIniFile; s: string; begin s:=inifile.ReadString('Settings','Image1.Picture',''); Image1.Picture.LoadFromFile(s);
Og i begge procedurer skal der være en en iniFile.Free; som sidste linje. Og skal det være helt godt skal der bruges try..finally for at sikre Free at inifile objektet.
Synes godt om
Slettet bruger
12. juni 2006 - 13:25#19
har lige en total shutdown af min pc - har købt en ny som jeg lige skal have installeret delphi på. så jeg har ikke lige mulighed for at prøve det...
men hæng på kroning du er jo en kanon hjælp her....
begin If OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.Filename); MyIniFile := TIniFile.Create(AppDir+'Settings.ini'); MyIniFile.WriteString('Graphics','Logo',OpenPictureDialog1.Filename); MyIniFile.Free; end; end;
procedure TForm1.Button2Click(Sender: TObject); var Filename: String; var MyIniFile: TIniFile; begin MyIniFile := TIniFile.Create(AppDir+'Settings.ini'); Filename:=MyIniFile.ReadString('Graphics','Logo','*FEJL*'); MyIniFile.Free; if Filename<>'*FEJL*' then Image1.Picture.LoadFromFile(Filename) else Showmessage('Filen '+Filename+' kan ikke indlæses.'); end;
procedure TForm1.FormCreate(Sender: TObject); begin AppDir:= ExtractFilePath(Application.ExeName) end;
end.
Synes godt om
Slettet bruger
23. juni 2006 - 13:47#21
hej nca
det virker jo fint.. men den loader billedet unaset hvordan checkbox1 er checked eller ikke og det er ikke optimalt.
når checkbox1 er checked skal billedet indlæses ellers ikke
Hej Sharon Du skal ét passende sted i din kode kontrollere om Checkbox1 er checked: If CheckBox1.Checked then begin ... Her skal min kode fra fra Button2Click stå endif
Synes godt om
Slettet bruger
23. juni 2006 - 16:00#23
hvorfor er der en dobbelt var? er det ik nok med en
Jo, du kan vælge at lave MyIniFile som en global variabel. Så kan du slette de 2 i procedurerne. Jeg foretrækker selv at bruge lokale variable, da jeg synes det giver en bedre oversigt over både proceduren og de variable, man bruger.
Synes godt om
Slettet bruger
07. december 2006 - 01:08#25
smid lige et svar
Synes godt om
Ny brugerNybegynder
Din løsning...
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.