-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:] www.ghcif.de [:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: G e R M a N H a C K C R a C K i L L e G a L F o R C e ---------===========================================--------- _______________________________________________________________ / <> V I S I T U S O N T H A W E B <> \ | >>¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯<< | | >> http://www.ghcif.de << | | >> << | | >> O N T H E I R C << | | >> << | | >> Server: IRCnet << | | >> Channel: #g.h.c.i.f << | | >> << | | >>¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯<< | | >> << | | >> << | | >> << | | >> [-- Tutorial name -] {} [-Delphi Beginner Tutorial] << | | >> [-- Subject -------] {} [-Delphi Beginner Tutorial] << | | >> [-- Writer --------] {} [-Black Death-------------] << | | >> [-- Contact -------] {} [-BlackDeath@ghcif.de-----] << | | >> [-- Release--------] {} [-05.10.2001--------------] << | | >> << | | >>_________________________________________________________<< | \ <> ::>> German Hack Crack illegal Force <<:: <> / ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ <---------------------------------------------------------------> | I N H A L T | | 1. Der Objektinspektor | | 2. Was sind Komponenten? | | 3. Mit einem Button erste Funktionen erstellen | | 4. Einfacher und kleiner HTTP Browser | | 5. FTP Client | <---------------------------------------------------------------> So, ich hab mir mal gedacht, ein Delphi Beginner Tutorial zu schreiben. Es soll helfen, anderen die Eerhaupt noch nicht mit Delphi umgehen können, die ersten Funktionen zu erstellen. 1. Der Objektinspektor Im Objektinspektor kann man alle Einstellungen fE Komponenten und fE das Form vornehmen. Die Standart-Einstellungen fE das Form sollten ungefähr so aussehen: __________________________ | | | Form1 : TForm1 [] | |__________________________| 1 |Caption |Form1 | 2 |ClinetHeight |453 | 3 |ClinetWidht |688 | 4 |Color |clBtnFace | 5 |Cursor |crDefault | 6 |Enabled |True | 7 |Font |(TFont) | 8 |Icon |(Leer) | 9 |Name |Form1 | 10|Visible |False | |_____________|____________| Dies sind aber nur die Wichtigsten Funktionen. Also, wunder Euch nicht, wenn da ein paar fehlen. :) 1 = Hier kann eintragen werden, was in der Leiste ganz oben im Programm angezeigt werden soll. Die Standart Einstellung ist immer Form1. 2 u. 3 = Hier kann man die Größe seines Programms einstellen. NatElich geht das auch mit der Maus. Funktioniert dann genauso als ob man die Größe von irgendeinem Programm ändern möchte. 4 = Hier kann man die Hintergrundfarbe einstellen. die Standart Einstellung ist grau. 5 = Hier kann man einstellen, welcher Mauszeiger angezeigt werden soll, wenn jemand Eer das Form die Maus bewegt. 6 = Dies ist eine ziemlich wichtige Funktion. Ihr kennt bestimmt Programme, wo beispielsweise Buttons nicht anklickbar sind, erst wenn etwas bestimmtes getan wurde. Hier handelt es sich um genau diese Funktion. Stellt man die Standart Einstellung "True" auf "False" ist es nicht mehr möglicht, etwas am Form zu machen. 7 = Das kann sich eigentlich jeder schon denken. Hier wird die Schriftart, Schriftartgröße, Farbe usw.. eingestellt. Allerdings auch nur fE das Form. Labels, Memos, Buttons usw.. mEsen immer neu eingestellt werden. 8 = Wenn jemanden im Programm das Icon nicht gefällt, kann man es hier ändern. 9 = Und hier bekommt das Form oder eine Komponente einen Namen. Hat ein Programm 10 Buttons ist es sehr sinnvoll, denen hier einen Namen einzutragen, denn dann kann man Sie gut unterscheiden kann. Als Beispiel könnte da stehen "schließen" oder "close" usw.. Achtung: Wenn "schließen" hier eingetragen wurde, wird bei einem Button dieses Wort nicht erscheinen. Denn das wird bei "Caption" eingestellt! 10 = Auch das ist ziemlich wichtig. Wenn etwas unsichtbar sein soll, stellt man immer einfach von "False" auf "True" um. Ihr könnt jetzt einfach mal mit diesen Sachen etwas rumexperimentieren und Euch damit vertraut machen. 2. Was sind Komponenten? Dazu gibt es eigentlich nicht viel zu sagen. Ohne Komponenten könnte ein Programmierer kein Programm erstellen. In der oberen Leiste sind viele "Teile" die man in sein Programm einbinden kann, wie Buttons, Edit Felder, Memos usw.. dies sind die Komponenten. Möchte jemand ein Programm erstellen, dass eine FTP Verbindung aufbauen, braucht er (logischerweise) die Komponente "nmftp". 3. Mit einem Button erste Funktionen erstellen Jetzt werden wir die ersten Funktionen erstellen, die durch einen Klick auf einen Button verursacht werden. Jetzt solltet Ihr Euer leeres Form vor Euch haben. Als erstes klickt Ihr einfach bei den "Standart"-Komponenten auf das kleine Icon mit dem Button und anschließend klickt ihr ins Form. Auf dem Button sollte als Caption "Button1" eingetragen sein. Trägt jetzt im Objektinspector "schließen" ein. Um die Funktion schließen einzuprogrammieren mEt Ihr Euch nur ein Wort merken können. Der Code dafE ist: Close; // mehr nicht Da fällt mir auch grad was ein. Wenn nach einer Zeile Ihr einen Kommentar setzen wollt, dann immer mit "//". Sicherlich fragt Ihr Euch was Ihr mit dieser Zeile machen mEt, oder? Die Lösung ist ganz einfach. Ihr macht einen Doppelklick auf den Button und da sollte folgendes stehen: procedure TForm1.Button1Click(Sender: TObject); begin end; Ihr mEst jetzt zwischen Begin und end diese eine Zeile einfEen. Das wEde dann so aussehen: procedure TForm1.Button1Click(Sender: TObject); begin Close; end; Man setzt immer 2 Leerzeichen, weil ein Programmcode dadurch Eersichtlicher wird. Aber das werdet Ihr schon merken. Startet jetzt mal Euer Programm mit der Taste F9! Und wenn Ihr keinen Fehler gemacht habt, wird sich das Programm schließen, wenn Ihr auf den Button klickt. :) Nun wisst Ihr wie man einen Code bei einer Komponente einfEt. Daher brauche ich das jetzt nicht mehr zu erklären. Ich werde in den kommenden Kapiteln nur noch den Namen der Komponente angeben und sofort den Code, der eingetragen werden soll. Kommen wir jetzt nun zum speichern und öffnen von Memo Feldern. Das ist schon interessanter und auch einfach. Ihr erstellt als erstes ein "Memo", dies findet Ihr links neben dem Button bei den Komponenten. Außerdem braucht Ihr zwei auch noch 2 Buttons. Einmal um den geschriebenen Text zu speichern und um ihn zu öffnen. Das ist der Code, der bei dem ersten Button eingefEt werden muss: Memo1.Lines.SaveToFile('C:\Test.txt'); Wie man sehen kann, wird eine Datei mit dem Namen Test.txt auf C: gespeichert. Um nun die gespeicherte Datei im Memo öffnen zu können, braucht man auch nur einen kleinen Code: Memo1.Lines.LoadFromFile('C:\Datei.txt'); Das war bisher nicht schwer, oder? Wir erweitern jetzt das ganze und werden noch eine Funktion einfEen, die ein Memo ausdruckt. Dazu erstellt Ihr noch einen Button und fEt die Komponente "PrintDialog" ein. Nun einen Doppelklick auf den Button fEt dies ein: var //Beachten: uses printers einbinden Geschriebenes,Zeile,maxtext:word; begin If Printdialog1.execute then //Druckdialog mit 'Ok' begin Printer.title:='Drucktitel'; //Title des Druckauftrages Printer.begindoc; //Begin der Aufzeichnung der Befehle Printer.canvas.font:=memo1.font; //Liest die Font Einstellungen vom Objektinspektor ein Zeile:=0; //Setze Variblen auf ganz oben Geschriebenes:=0; while Zeile=Printer.Pageheight-100 then begin printer.newpage; //neue Seite geschriebenes:=0; //Setze das bisher geschriebene auf 0 end; inc(Zeile); //Nächste Zeile end; Printer.enddoc; //Beendet das Formular end; end; 4. Einfacher und kleiner HTTP Browser Ein Browser ist mal etwas Interessantes und auch leichtes. Schwerer wird es wenn Ihr Proxies einbinden wollt. Aber das werde ich hier nicht ansprechen, weil dies ein Beginnger Tutorial sein soll. FEt als erstes folgende Komponenten in Euer Form ein: - Button <- läßt die Seite laden - StatusBar <- zeigt Infos der Seite an, beim Roll Over auf Links - Edit <- zum eingeben der URL - WebBrowser <- hier wird die Seite angezeigt - ProgressBar <- zeigt den Lade Status an Hier werdet Ihr etwas neues anwenden mEsen. Vorher habt Ihr immer einen Doppelklick auf die Komponente gemacht um den Code auszufEren. Jetzt wird das anders gemacht. Manchmal mE ja auch etwas ausgefErt werden, wenn Ihr Eer den Button mit der Maus gleitet oder ähnliches... Deshalb steht im Objektinspektor neben "Eigenschaften" auch "Ereignisse". Wenn Ihr davon einen bestimmten anwenden wollt, klickt Ihr einfach da drauf. Als erstes macht Ihr folgendes. Ihr drEkt die Taste F12 und nun habt Ihr den Quellcode vor Euch. Dort sollte ziemlich weit oben diese Zeile stehen (eventuell mehr): uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; Diese Zeile muss ergäntzt werden: uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, HTMLPropSheetLibrary2_TLB, OleCtrls, SHDocVw_TLB, ComCtrls, ExtCtrls; Macht jetzt folgendes: In eine leere Stelle des Forms klicken -> Ereignisse -> Form Show und dann solltet Ihr das hier vor Euch haben: procedure TForm1.FormShow(Sender: TObject); begin end; Hier trägt Ihr nur die Zeile ein: begin BrowseTo('about:blank'); end; Das Prinzip solltet Ihr jetzt verstanden haben. Also, macht dies jetzt weiter, bis Euer kompletter Code so aussieht (hab Kommetare hinzugefEt): procedure TForm1.FormShow(Sender: TObject); begin BrowseTo('about:blank'); //zeigt die Seite "about:blank" an end; procedure TForm1.BrowseTo(URL: String); var Flags, Target, PostData, Headers: OleVariant; begin Flags:= 0; Target:= ''; PostData:= ''; Headers:= ''; WebBrowser1.Navigate(URL, Flags, Target, PostData, Headers); end; procedure TForm1.Button1Click(Sender: TObject); begin BrowseTo(Edit1.Text); //zeigt die URL an, die im Edit angegeben wurde end; procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject; const Text: WideString); begin StatusBar1.SimpleText:= Text; end; procedure TForm1.WebBrowser1TitleChange(Sender: TObject; const Text: WideString); begin Caption:= Text; end; procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); begin ProgressBar1.Max:= ProgressMax; ProgressBar1.Position:= Progress; end; Jetzt abspeichern, F9 drEken und testen. Have phun ;) Normalerweise sollten keine Fehler hier auftreten. Falls Ihr Probleme haben solltet, schaut einfach mal nach, ob Ihr alles richtig eingetragen habt! 5. FTP Client Ich hab mir mal gedacht, dass ist doch irgendwie billig, was ich Euch bisher gezeigt habe. Wie wäre es mal mit etwas anspruchsvolleren? Eine Internetanwendung, mit der man sich in einen FTP Server einloggen kann, Dateien downloaden und uploaden kann. Als erstes mEt Ihr folgende Komponenten suchen und in Euer Form einfEen: - Label1 // bekommt den Namen: Benutzer - Label2 // bekommt den Namen: URL - Laben3 // bekommt den Namen: Passwort - ListBox // hier werden die Dateien auf dem Server angezeigt - StatusBar // fE den Status ;) - 5 Buttons // Verbindung herstellen, Verbindung trennen, Download, Upload, Delete - OpenDialog // Läßt später das Fenster anzeigen, indem die Dateien zum Uploaden ausgewählt werden - SaveDialog // Läßt später das Fenster anzeigen, indem der Pfad zum Downloaden ausgewählt wird - NMFTP // zum herstellen der FTP Verbdinung Diesmal mEt Ihr noch bei: var Form1: TForm1; folgendes einfEen, damit es so aussieht: var Form1: TForm1; sizeList, attrList, nameList: TStrings; fName: string; Und hier der gesammte Code mit dem Ihr jetzt arbeiten mEt: procedure TForm1.setButtons(state:Byte); // verriegelt Buttons gegeneinander begin case state of //... abhängig vom Zustand 0: begin Button1.Enabled := True; Button2.Enabled := False; Button3.Enabled := False; Button4.Enabled := False; Button5.Enabled := False; ListBox1.Clear // ListBox säubern end; 1: begin Button1.Enabled := False; Button2.Enabled := True; Button3.Enabled := False; Button4.Enabled := True; Button5.Enabled := False; ListBox1.ItemIndex := -1 // kein Eintrag ausgewählt end; 2: begin Button1.Enabled := False; Button2.Enabled := True; Button3.Enabled := True; Button4.Enabled := True; Button5.Enabled := True end end end; procedure TForm1.Button1Click(Sender: TObject); // FTP-Verbindung herstellen begin Screen.Cursor := crHourGlass; with NMFTP1 do begin Host := URL.Text; Port := 21; // Standardport TimeOut := 20000; // 20 sek Versuch UserID := Benutzer.Text; Password := Passwort.Text; Connect end end; procedure TForm1.Button2Click(Sender: TObject); // FTP-Verbindung trennen begin NMFTP1.Disconnect end; procedure TForm1.NMFTP1Connect(Sender: TObject); // FTP-Verbindung ist hergestellt begin Beep; StatusBar1.SimpleText := 'FTP-Verbindung zu ' + NMFTP1.Host + ' ist hergestellt!'; Screen.Cursor := crDefault; lesen; // Ergänzung! setButtons(1) end; procedure TForm1.NMFTP1ConnectionFailed(Sender: TObject); begin Screen.Cursor := crDefault; StatusBar1.SimpleText := 'FTP-Verbindung zu ' + NMFTP1.Host + ' ist fehlgeschlagen!' end; procedure TForm1.NMFTP1Disconnect(Sender: TObject); // FTP-Verbindung wurde getrennt begin Beep; StatusBar1.SimpleText := 'FTP-Verbindung zu ' + NMFTP1.Host + ' wurde getrennt!'; Screen.Cursor := crDefault; setButtons(0) end; procedure TForm1.NMFTP1AuthenticationFailed(var Handled: Boolean); var Wiederholung: Integer; begin Benutzer.Text := NMFTP1.UserID; Passwort.Text := NMFTP1.Password; wiederholung := Application.MessageBox('Soll die Anmeldung erneut versucht werden?', 'Anmeldung beim Server fehlgeschlagen!', 36); if Wiederholung = 6 then handled:=True; // ja gedrEkt end; procedure TForm1.lesen; procedure anzeigen; var i: Word; size: LongInt; s: string; begin size := 0; for i := 0 to sizeList.Count - 1 do begin s := attrList[i]; // Einzelattribut zuweisen if s[1] <> 'd' then begin // wenn kein Verzeichnis dann ... size := size + StrToInt(sizeList[i]); // Dateigröße aufsummieren ListBox1.Items.Add(nameList[i]) // Namen anzeigen end end; Label3.Caption := 'Gesamtgröße in Byte: ' + IntToStr(size) end; begin // Stringlisten erzeugen: sizeList := TStringList.Create; attrList := TStringList.Create; nameList := TStringList.Create; Screen.Cursor := crHourGlass; try with Form1.NMFTP1 do begin ParseList := True; // Einlesen aktivieren Vendor := NMOS_AUTO; // Systemtyp List; // Verzeichnisinhalt in FTPDirectoryList einlesen // Einzelinformationen in Stringlisten speichern: sizelist := FTPDirectoryList.size; attrList := FTPDirectoryList.attribute; nameList := FTPDirectoryList.name; anzeigen // Stringlisten auswerten und anzeigen end finally Screen.Cursor := crDefault end end; procedure TForm1.Button3Click(Sender: TObject); //"DownLoad"-Button begin if ListBox1.ItemIndex = -1 then Exit; // kein Eintrag ausgewählt fName := ListBox1.Items[ListBox1.ItemIndex]; SaveDialog1.FileName := fName; if SaveDialog1.Execute then begin NMFTP1.Mode(MODE_IMAGE); // binären Übertragungsmodus einstellen NMFTP1.Download(fName,'') end end; procedure TForm1.Button4Click(Sender: TObject); // "UpLoad"-Button begin if OpenDialog1.Execute then begin fName := OpenDialog1.FileName; NMFTP1.Mode(MODE_IMAGE); // binären Übertragungsmodus einstellen NMFTP1.Upload(fName,'') end end; procedure TForm1.Button5Click(Sender: TObject); // "Delete"-Button begin if ListBox1.ItemIndex = -1 then Exit; // kein Eintrag ausgewählt fName := ListBox1.Items[ListBox1.ItemIndex]; if Application.MessageBox('Wollen Sie die selektierte Datei wirklich vom Server löschen?', 'Frage', 36) = 6 then NMFTP1.Delete(fName) end; procedure TForm1.NMFTP1Success(Trans_Type: TCmdType); // erfolgreiche AusfErung begin case Trans_Type of cmdDownLoad: begin StatusBar1.SimpleText := 'Download von ' + SaveDialog1.FileName + ' erfogreich ausgefErt'; setButtons(1) end; cmdUpLoad: begin StatusBar1.SimpleText := 'Upload von ' + OpenDialog1.FileName + ' erfogreich ausgefErt'; ListBox1.Clear; lesen; setButtons(1) end; cmdDelete: begin StatusBar1.SimpleText := 'Löschen von ' + fName + ' erfolgreich ausgefErt!'; ListBox1.Clear; lesen; setButtons(1) end end end; procedure TForm1.NMFTP1PacketRecvd(Sender: TObject); // DownLoad-Fortschrittsanzeige begin StatusBar1.SimpleText := IntToStr(NMFTP1.BytesRecvd) + ' von ' + IntToStr(NMFTP1.BytesTotal) end; procedure TForm1.NMFTP1PacketSent(Sender: TObject); // Upload-Fortschrittsanzeige begin StatusBar1.SimpleText := IntToStr(NMFTP1.BytesSent) + ' von ' + IntToStr(NMFTP1.BytesTotal) end; procedure TForm1.FormDestroy(Sender: TObject); begin try sizeList.Free; attrList.Free; nameList.Free except end end; procedure TForm1.ListBox1Click(Sender: TObject); begin setButtons(2) end; Durch die vielen eingefEten Kommentare sieht man immer was an welcher Stelle passiert. Wer sich das jetzt gut ansieht, wird dies ohne Probleme verstehen und kann auch mit Hilfe dieser Codes seine eigenen ersten Programme schreiben. Falls es irgendwo mal Probleme geben sollte, dann könnt Ihr mir immer gerne mailen. ;) Yourz Black Death Member of GHCiF :: Information :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: Dieser Text hier stammt aus dem Tutorial Archiv des Login Club´s :: Visit: http://www.login-club.org | irc.euric.net 6667 #loginclub :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::