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