Avatar billede dominantafterdark Nybegynder
05. juni 2004 - 10:23 Der er 11 kommentarer og
1 løsning

Open og SaveDialog

Hvordan bruges OpenDialog og SaveDialog?
Avatar billede stone Forsker
05. juni 2004 - 11:49 #1
//op er Opendialog
procedure TForm1.OpenClick(Sender: TObject);
begin
if
Op.Execute then
Editor.Lines.LoadFromFile('test.txt');
end;

//Sd er Savedialog
procedure TForm1.SaveClick(Sender: TObject);
begin
if
Sd.Execute then
Editor.Lines.SaveToFile('test.txt');//hvis filen skal gemmes et andet sted 'c:\sti osv
end;
Avatar billede stone Forsker
05. juni 2004 - 11:52 #2
der kan sættes forskellige parameter op i din f.eks opendialog

under filter.... i første felt tekst filer (*.txt) næste blok *,txt

så vil alle filer med extention *.txt kun blive vist
Avatar billede stone Forsker
05. juni 2004 - 11:57 #3
du kan også hente en fil direkte ind i din memo eller Richedit1 uden brug af open/save dialog

med følgende kode..
// hent fil ind i Memo
Memo.Lines.LoadFromFile('test.txt');

//Gem fil

Memo.Lines.SaveToFile('test.txt');
Avatar billede stefmeister Nybegynder
05. juni 2004 - 12:12 #4
stone -> med din kode til open/save dialog der kan man ikke åbne den fil man gerne vil, så får man fejl.

dominantafterdark -> de skal se sådan her ud:


//-> Gemmer det der står i en Memo til det du gerne vil
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;


//-> Åbner det du gerne vil i en Memo
procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

Grunden til at vi skriver "if" opendialog er at den så ikke laver fejl hvis brugeren ikke vælger noget.
Avatar billede stone Forsker
05. juni 2004 - 12:33 #5
jo du har ret i at din metode er den mest generelle
men det var kun et eksempel i brug af dialogerne

hvad for en fejl?

Jeg får ingen fejl hvis fil ikke vælges
Avatar billede stefmeister Nybegynder
05. juni 2004 - 14:01 #6
nej men HVIS der vælges en fil, for du skriver at du skal åbne test.txt ligemeget hvad man vælger, og hvis der ikke findes sådan en, så går den galt.
Avatar billede dominantafterdark Nybegynder
05. juni 2004 - 14:44 #7
oki, det virker logisk...

Hvad med ColorDialog og PrintDialog?
Avatar billede janbb Juniormester
05. juni 2004 - 15:03 #8
Fik denneher kode her på E engang, som jeg bruger (kan ikke lige komme på hvem der leverede den):

procedure PrintTStrings(Lst : TStrings) ;
var
  I,
  Line : Integer;
begin
  I := 0;
  Line := 0 ;
  Printer.BeginDoc ;
  for I := 0 to Lst.Count - 1 do begin
    Printer.Canvas.TextOut(0, Line, Lst[I]);

    {Font.Height is calculated as -Font.Size * 72 / Font.PixelsPerInch which returns
    a negative number. So Abs() is applied to the Height to make it a non-negative
    value}
    Line := Line + Abs(Printer.Canvas.Font.Height);
    if (Line >= Printer.PageHeight) then
      Printer.NewPage;
  end;
  Printer.EndDoc;
end;


procedure TFmain.printmemo1Click(Sender: TObject);
begin
  PrintTStrings(dbmemo1.lines);
end;
Avatar billede stefmeister Nybegynder
05. juni 2004 - 16:07 #9
Color Dialog:

procedure TForm1.Button1Click(Sender: TObject);
begin
if ColorDialog1.Execute then
Memo1.Color := ColorDialog1.Color;          //Denne gør Memo'en den farve du har valgt med ColorDialog1
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if ColorDialog2.Execute then
Memo1.Font.Color := ColorDialog2.Color;    //Denne gør teksten i Memo'en den farve du har valgt med ColorDialog2
end;
Avatar billede stefmeister Nybegynder
05. juni 2004 - 16:15 #10
den med printeren kan jeg ikke lige, den er lidt mere tricky.
Avatar billede stefmeister Nybegynder
05. juni 2004 - 16:33 #11
noget i stil med det her, men det er ikke særlig godt:

procedure TForm1.Button1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
  with Printer do
  begin
    BeginDoc;
    Canvas.TextRect(Rect(200,200,PageWidth-200,PageHeight-200),
    200, 200, Memo1.Lines.Text);
    EndDoc;
  end;
end;
Avatar billede stefmeister Nybegynder
05. juni 2004 - 16:36 #12
Til printeren ville jeg nok bruge janbb's svar, og så lige sætte "if PrintDialog1.Execute then" ind foran i knappen, så det ser sådan her ud:

procedure TFmain.printmemo1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
  PrintTStrings(dbmemo1.lines);
end;
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester