Gå til innhold

Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet (endret)

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
Skrevet (endret)

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
Skrevet (endret)

Beklager *bumben...

 

Problemet er at når jeg lagrer et dokument får det ikke noe filetternavn

 

filnavn.JPG

link til bildet

 

Hva er galt?

 

Filter editoren er for savedialogen, ja..

Endret av Stian89
Skrevet (endret)

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
Skrevet

Nå virker jeg sikkert dum, men på de 2 dagene jeg har holdt på, har jeg ikke forstått nok, til å forstå heelt hvor man skal plasere den koden.......:|

Skrevet (endret)
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
Skrevet

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

Skrevet
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??!

Skrevet

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

Skrevet (endret)

Hvordan lage en hotkey (CTRL+A) slik at all tekst i teksteditioren blir merket?

 

 

edti: hvordan få printdialogen til å printe ut memo1?

Endret av Stian89
Skrevet

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.

Skrevet (endret)

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
Skrevet

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

Skrevet

LOL!!!! Jeg trudde du var en kamerat av meg (ettersom han alltid kaller seg Stian89), LOL!! Tok visst feil ;), fant ut at det var ikke han som er Stian89 på dette forumet.

 

Sorry meg ;).

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...