Gå til innhold

Anbefalte innlegg

Dagen, jeg er HELT N00B i delphi, (begynnte for 2dager siden). Så for å øve satte jeg igang med å lage en enkel tekst editor. Problemet oppstår da jeg skal lage en hotkey til save\new\open o.l...Dette er sikkert helt parkert laaangt bak må å spørre om, men hvordan gjøres det.

 

Jeg har sett noen guider på nettet, men tør ikke påstå at jeg fatter dem helt. Så hvis noen kunne forklare meg, hadde det vært flott...

 

 

(Tok ikke delphi hjelpe filen heller)

 

 

(kjører Delphi 7 Enterprise, hvis det har noe å si)

Endret av Stian89
Lenke til kommentar
Videoannonse
Annonse

Hvis new/open/save er en action, så har den en property som heter shortcut. Dette gjelder også hvis det er en menu item.

Hvis det er en TToolButton har du et problem.

Da bør du heller gå over til actions.

 

EDIT: Ingen skam å være N008

Endret av kr1570ffz0r
Lenke til kommentar

Takk skal du ha, fungerte med det der shortcut greiene.

Ikke for å mase, men jeg lurer også på hvordan jeg legger til klokkeslett og dato? Slik som i notepad liksom, må jeg legge til noe komponent? eller er det bare kode?

 

 

edit:

 

Dette blir mye mas, meeen:

Når jeg har skrevet noe i dokumentet og trykker på krysset, registreres det ikke noen endringer, og man blir ikke bedt om å lagre. Hvrodan få til dette?

Endret av Stian89
Lenke til kommentar

Hehe, jeg kan ikke si du maser så mye i forhold til hvordan jeg har gjort det i C++ forumet (Hei, søppel! :D )

 

Jeg vet hvordan du gjør dette, men jeg skal dobbeltsjekke så det blir riktig.

Editer denne posten når det er gjort.

 

EDIT: Slik gjøres det:

 

var
 svdlg: TSaveDialog;
 FName: TFileName; //samme som string 
begin
 svdlg := TSaveDialog.Create(Self);
 if (svdlg.Execute) then
 begin
   FName := ChangeFileExt(svdlg.FileName, '<din extension>');
   { Kode til å lagre filen her }
 end
 else
   { Kode hvis du trykker på Avbryt/Cancel }
end;

 

Du finner ut hvilken extension brukeren har valgt ved å sjekke svdlg.FilterIndex.

 

EDIT2: Husk at du bruker din egen TSaveDialog istedenfor svdlg. Den som jeg laget i denne kodesnutten her inneholder ingen info om filter og andre properties.

Endret av kr1570ffz0r
Lenke til kommentar
Hehe, jeg kan ikke si du maser så mye i forhold til hvordan jeg har gjort det i C++ forumet (Hei, søppel! :D )

 

Jeg vet hvordan du gjør dette, men jeg skal dobbeltsjekke så det blir riktig.

Editer denne posten når det er gjort.

 

EDIT: Slik gjøres det:

 

var
 svdlg: TSaveDialog;
 FName: TFileName; //samme som string 
begin
 svdlg := TSaveDialog.Create(Self);
 if (svdlg.Execute) then
 begin
   FName := ChangeFileExt(svdlg.FileName, '<din extension>');
   { Kode til å lagre filen her }
 end
 else
   { Kode hvis du trykker på Avbryt/Cancel }
end;

 

Du finner ut hvilken extension brukeren har valgt ved å sjekke svdlg.FilterIndex.

 

EDIT2: Husk at du bruker din egen TSaveDialog istedenfor svdlg. Den som jeg laget i denne kodesnutten her inneholder ingen info om filter og andre properties.

beklgaer bumben.....

 

 

Hvis jeg gir deg kildekoden til texteditoren, kan du sette inn koden du laget da? plz....sånn at jeg kan se hvordan det skal bli gjordt......

 

source

 

går det?

 

 

 

 

 

edit:

skal koden gå her?

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

HER!!!!SKAL KODEN GÅ HER!?!?!

 

 

 

edit: har prøvd å plassere den litt omkring, hver gang får jeg feil på alle procedure'ne (new\Open\Save buttonene)....hva er galt? Fatter ikke helt hvor koden skal gå...

Endret av Stian89
Lenke til kommentar

Bytt ut koden i dette eventet:

procedure TForm1.Save1Click(Sender: TObject);  
begin
   if savedialog1.execute then memo1.Lines.SaveToFile(savedialog1.FileName);  end;

 

med noe slikt som:

procedure TForm1.Save1Click(Sender: TObject);
var
 fname: string;
begin
 if savedialog1.execute then
 begin
   fname := savedialog1.filename;
   if ExtractFileExt(fname) = '' then
     ChangeFileExt(fname, '.txt');
   memo1.lines.saveToFile(fname);
 end;
end;

 

Tror det skulle gjøre susen...

 

Et annet alternativ er jo å sette savedialog1 sin DefaultExt-property til 'txt':

Specifies a default file extension.

 

property DefaultExt: string;

 

Description

 

DefaultExt specifies a file extension that is appended automatically to the selected file name, unless the selected file name already includes a registered extension. If the user selects a file name with an extension that is unregistered, DefaultExt is appended to the unregistered extension.

 

Extensions longer than three characters are not supported. Do not include the period (.) that divides the file name and its extension.

 

-Vegar

Lenke til kommentar
Bytt ut koden i dette eventet:

procedure TForm1.Save1Click(Sender: TObject);  
begin
   if savedialog1.execute then memo1.Lines.SaveToFile(savedialog1.FileName);  end;

 

med noe slikt som:

procedure TForm1.Save1Click(Sender: TObject);
var
 fname: string;
begin
 if savedialog1.execute then
 begin
   fname := savedialog1.filename;
   if ExtractFileExt(fname) = '' then
     ChangeFileExt(fname, '.txt');
   memo1.lines.saveToFile(fname);
 end;
end;

 

Tror det skulle gjøre susen...

 

Et annet alternativ er jo å sette savedialog1 sin DefaultExt-property til 'txt':

Specifies a default file extension.

 

property DefaultExt: string;

 

Description

 

DefaultExt specifies a file extension that is appended automatically to the selected file name, unless the selected file name already includes a registered extension. If the user selects a file name with an extension that is unregistered, DefaultExt is appended to the unregistered extension.

 

Extensions longer than three characters are not supported. Do not include the period (.) that divides the file name and its extension.

 

-Vegar

Det går ikke, fremdeles ingen fil extension,

 

hva er galt??!

Lenke til kommentar

Nei - det er jeg som har tulla litt...

 

ChangeFileExt( ) er en funksjon som tar inn gammelt filnavn + ny extention inkludert '.' og returnerer det nye filnavnet. Riktig kode blir således:

 

procedure TForm1.Save1Click(Sender: TObject);
var
fname: string;
begin
if savedialog1.execute then
begin
  fname := savedialog1.filename;
  if ExtractFileExt(fname) = '' then
    fname := ChangeFileExt(fname, '.txt');
  memo1.lines.saveToFile(fname);
end;
end;

 

Og denne gangen har jeg tatt meg bryet og teste koden så nå skal den funke ;-)

 

-Vegar

Lenke til kommentar

Extensionen er ikke automatisk lagt til (Delphi skal jo tross alt ikke gjørra masse drit bakom ryggen på programmereren :)), hvis du er veldig usikker på åssen stringene dine ser ut, bruk ShowMessages, tekstfiler, eller noe for å debugge det.

 

Bare spør meg på MSN hvis du lurer på noe.

Lenke til kommentar

Oh, btw, sjøl om mange på forumet ikke er helt enig med meg, er funksjoner og kode bedre enn å proppe formen full av komponenter ;) (ikke minst raskere). Det å hive sammen drøssevis av komponenter, å kalle noen av funksjonene dems er virkelig ikke det Delphi er ment til (use it's hidden powers :p).

Endret av chrml
Lenke til kommentar

Hvis du har Select all/Merk alt i en meny, f.eks. edit-meny, er det ikke verre enn å sette dennes shortcut-property til ctrl+a, og legge til: Memo1.SelectAll; i onclick-eventen..

Å printe har jeg svært liten erfaring med, men etter det jeg kan sei hjelpefilene, må du bruke en RichEdit i stedet for en Memo.. Deretter er det bare å kjøre [RichEdit1/Memo1].Print(<title>); hvor <title> er det det skal stå i lista over utskriftsjobber..

Et alternativ er å kjøre Print på form'en din, men da skriver du ut hele formen, med alt som er på den..

 

chrml: dette er vel ikke det første han burde kaste seg ut på...? :p

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...