Delphi --- Sekalaiset 1

//Näyttää kirjoitetun sanan takaperin, formilla kaksi
//Edit-komponettia ja yksi nappi

procedure TForm1.BitBtn1Click(Sender: TObject);
var etup,takap : string;
    sp,i       : integer;
begin
  etup := Edit1.Text ;
  sp := Length(etup); // sananpituus
    for i:= sp downto 1 do  //takaperin max pit. 1:seen
      begin
        takap := takap + etup[i];
      end;
    Edit2.Text := takap;
end; 
 Ohjelmasta vain yksi ilmentymä käynnissä kerrallaan:

//Siirry ohjelman  *.dpr:ään, löytyy View...  Project Source...

program Email;uses

 Forms,
 WinProcs,//SetFocus ja FindWindows-funktiot löytyy täältä
 Unit1 in 'Unit1.pas' {Form1},
 Unit2 in 'Unit2.pas' {Form2};

{$R *.RES}
 var Edellinen: HWND;// Lisää, muuttuja esitellään
begin
  Edellinen := FindWindow('TForm1', 'XXXXXX');//Lisää, XXXXXX = päälomakkeen palkin teksti
   if Edellinen <> 0 then                //Lisää,  jos FindWindow löytää, palautuu arvo 0
   begin                                 //Lisää
     SetForegroundWindow(Edellinen);     //Lisää, aktivoi edellisen ilmentymän
     Application.Terminate;              //Lisää, se jota yritettiin käyn. tuhotaan
   end;                                  //Lisää
  Application.CreateForm(TForm1, Form1); //alkuperäinen rivi
  Application.CreateForm(TForm2, Form2); //alkuperäinen rivi
  Application.Run;
end.

//Tässä esimerkissä päälomake on Form1 ja Object Inspectorin Form1:sen Caption
//ominaisuuden arvo on XXXXXX
Oletko huomannut että Delphiä voi pitää käynnissä useita samanaikaisesti.
Voit hyödyntää ominaisuutta tipauttamalla jo käynnissä olevan Delphin
tehtäväpalkkiin. Käynnistä uusi Delphi ja sukkuloi näiden välillä.
Leikepöytää voi käyttää hyväksi jos haluaa kopioida / liittää jotain
projektista toiseen.
//Päivien laskenta. Laskee todelliset päivät.
//Formilla kolme Edit komponenttia ja yksi nappi.
//Huom. päivämäärä on syötettävä muodossa 23.5.1996. Eli päivät, kuukaudet ja vuodet.
//Erottimena on käytettävä pistettä.
//Virhetarkistuksia ei tässä ole kuin että molemmissa kentissä pitää olla jotain.

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.text <> '' then
    begin
      if Edit2.text <> '' then
        begin
          Edit3.Text := FloatToStr(Abs(StrToDate(Edit1.Text)- StrToDate(Edit2.Text)));
        end;
    end;
end;

//Edelliseen esimerkkiin voisi vielä liittää napit jolla voisi syöttää tämä päivä edittiin.
//Usein lasketaan joko tästä päivästä johonkin tulevaisuuteen tai menneestä tähän päivään.

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Edit1.Text := DateToStr(Date); //lisätään BitBtn2:lla tämä pvm Edit1:seen
  Edit1.SetFocus;
  Edit1.SelStart := (Length(Edit2.Text));//asetetaan focus pvm perään
end; 
Vielä yksi pöhkö juttu:
Jos kirjoittelet Delphin kooditoimittimella ja pitäisi muistaa esim. pilkun ASCII koodi.
Hämärästi muistelet sen olevan jotain 4-kymmentä ja jotain.Tässä laiskan miehen vinkki:
Paina Alt-näppäin pohjaan (pidä pohjassa) ja syötä numeronäppäimilla vaikka 44 ja
päästä Alt-näppäin. Kooditoimittimeen tulostuu pilkku, jos numerot osuu kohdalle.   :-)
//Toisen ohjelman käynnistäminen omasta
//Formilla Button1:stä klikattaessa käynnistetään Kalenteri.exe ohjelma
//jota etsitään aina samasta hakemistosta kuin missä oma ohjelma sijaitsee.
//Jokuhan siirtää ohjelmia kuitenkin...tai jos ei Kalenteri.exe:ä löydy
//nostatetaan herja puuttuvasta ohjelmasta.

procedure TForm1.Button1Click(Sender: TObject);
 var polku : Array[0..255] of Char;
begin
  if FileExists(ExtractFilePath(Application.ExeName)+'Kalenteri.exe') then
    begin
      StrPcopy(polku,ExtractFilePath(Application.ExeName)+'Kalenteri.exe');
      WinExec(polku,sw_ShowNormal);
    end
else
  MessageDlg('Kalenteri.exe tiedostoa ei löydy!',   mtInformation,[mbOk], 0);
end;
//Helppo kello ja päiväys:
//Laita Formille kaksi Label:lia ja  yksi Timer komponetti.
//Anna Timerin interval olla 1000 (sekunti), laita OnTimer:iin

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Label1.Caption:= TimeToStr(Time); //Label1:seen kello
  Label2.Caption :=DateToStr(Date); //Label2:seen päiväys
end;

//lisää FormCreateen vielä rivi niin pääset eroon käynnistysviiveestä
// (6.6.2003)

procedure Tmain.FormCreate(Sender: TObject);
 begin
   Label1.Caption := TimeToStr(Time);//kello käyntiin reaaliajassa
   //ilman sekunnin viivettä
   //...koodia ja paljon
 end;
//Lisää animoitu kursori sovellukseesi.
//Esimerkissä kursori ladataan hölmösti nappia painamalla, jokainen
//voi miettiä missä tilanteessa vaihtaa kursorin näköä.
//Kannattaa käydä tarkistamassa löytyykö polun päästä mitään!

 const  Kursori1 = 1; // Ekaks  vakio

procedure TMainForm.Button1Click(Sender: TObject);
 begin
    Screen.Cursors[ Kursori1 ] :=  LoadCursorFromFile('c:\windows\cursors\E_busy.ani' );
    Cursor := Kursori1;
 end;
//Valikkotekstien alle tuleva viiva 
 
 
//Tee ensin MainMenu-komponentilla valikot,
//ota sitten Additional välilehdeltä Bevel-komponentti,
//pudota formille ja aseta Bevelin
//Align   arvoksi  alTop
//Shape   arvoksi  bsTopLine
//Height  arvoksi  vaikka 5
 
//Ohjelman sammutus joko:
Close;
//tai suositeltavampi:
Application.Terminate;
//Tutkii käytetäänkö desimaalierottimena pilkkua.

//löytyy... maakohtaiset asetukset, luku välilehdeltä
//Oletuksena suomalaisissa asetuksissa on pilkku,
//mutta joku voi silti käyttää pistettä. (1.12.2000)

...koodia...
if  DecimalSeparator = ',' then
...tee jotain...
//Viikkonumeron laskenta. Esimerkissä formilla yksi StaticText ja Button.
(6.12.2000)

function WeekOfYear(DT: TDateTime): Integer;
var    Y, M, D:  Word;
           Tmp:  Integer;
begin
  DecodeDate(DT, Y, M, D);

  Tmp := DayOfWeek(EncodeDate(Y, 1, 1));
  if Tmp = 1 then Tmp := 8;
  Dec(Tmp);
  if (Tmp > 4) and (M = 1) and (Tmp + D < 9) then
  begin
    Result := WeekOfYear(EncodeDate(Y - 1, 12, 31));
    Exit;
  end;
  if (DayOfWeek(EncodeDate(Y, 12, 31)) in [2..4]) and
 (DayOfWeek(EncodeDate(Y, 12, 31)) - (EncodeDate(Y, 12, 31) - DT) > 1) then begin
  Result := WeekOfYear(EncodeDate(Y + 1, 1, 1));
  Exit;
  end;
  Result := (100 * Y) + (Trunc(DT - EncodeDate(Y, 1, 1)) + Tmp - 1) div 7 + 1;
  if Tmp > 4 then Dec(Result);
end;

procedure TForm1.Button1Click(Sender: TObject);
var S: String;
begin
// muistaakseni funktio palauttaa myös vuosituhannen
// joten hankkiudutaan siitä eroon...
  S:= IntToStr(WeekOfYear(Date));
  StaticText1.Caption := Copy(S, 5, 2);
end;
//15.8.2001
//Viikonpäivä päiväyksen eteen:

procedure TForm1.Timer1Timer(Sender: TObject);
var paivat: array[1..7] of string;
  begin
    paivat[1] := ' Sunnuntai';
    paivat[2] := ' Maanantai';
    paivat[3] := ' Tiistai';
    paivat[4] := ' Keskiviikko';
    paivat[5] := ' Torstai';
    paivat[6] := ' Perjantai';
    paivat[7] := ' Lauantai';
    StaticText40.Caption := paivat[DayOfWeek(Date)]+'  '+DateToStr(Date);
  end;

//Esim: Keskiviikko  15.8.2001
//20.05.2003 Ohjelma, joka toimii ainoastaan tiettyyn päivään asti
//lisää Pääformin FormShow:in

procedure Tmain.FormShow(Sender: TObject);
  var v, kk, pv: Integer;
    begin
      v  := 2002;
      kk := 12;
      pv := 1;

      if (Date >= EncodeDate(v, kk, pv)) then
        begin
          ShowMessage('Tämä ohjelma ei toimi enää '
          +DateToStr(EncodeDate(v, kk, pv))+' jälkeen');
          application.Terminate;
        end;
    end;
//7.10.2003 StringGridillä tiedoston avaus ja tallennus...
//StringGrid on nimetty tässä PUH:iksi...
//Suunnitelma X: Ohjelman käynnistyessä, sen pitää avata automaattisesti tiedosto Puh.txt,
//lukea tiedot StringGrid:iin, ja kun ohjelma suljetaan, tallentaa tiedot Puh.txt:hen.
//Puh.txt tiedoston paikka on samassa kansiossa kuin itse ohjelma, jos joku siirtää
//ohjelmaa, tallennuksen pitää vielä pelittää.

//Ensin tehdään muuttuja yleisellä tasolla:
.......
.......
var
Form1: TForm1;
Filename: String;//Muuttuja Filename

implementation

{$R *.DFM}
.......
.......

//FormCreate:een laitetaan seuraavaksi:
.......
.......
Filename := ExtractFilePath(Application.ExeName)+'Puh.txt';//Polku talteen
.......
.......

//Edelleen FormCreate:een:
.......
.......
//Ladataan tiedot
AssignFile(F, Filename); //tässä se polku
Reset(F);
Readln(F, Tmp);
PUH.ColCount:=Tmp;
Readln(F, Tmp);
PUH.RowCount:=Tmp;
for x:=0 to PUH.ColCount-1 do
  for y:=0 to PUH.RowCount-1 do
    begin
      Readln(F, TmpStr);
      PUH.Cells[x,y]:=TmpStr;
    end;
CloseFile(F);
.......
.......

procedure TForm1.FormDestroy(Sender: TObject);//FormDestro:hin laitetaan...
var
F: TextFile;
x, y: Integer;
  begin
    AssignFile(F, Filename);//täälläkin polkua tarvitaan
    Rewrite(F);
    Writeln(F, PUH.ColCount);
    Writeln(F, PUH.RowCount);
    for x:=0 to PUH.ColCount-1 do
      for y:=0 to PUH.RowCount-1 do
        Writeln(F, PUH.Cells[x,y]);
    CloseFile(F);
end; //tallennetaan tiedot ja Formi "tuhotaan"
//ps. käykää katsomassa miten tiedot on tallennettu
//(esim. 10 riviä ja 5 saraketta).
//7.10.2003