|
Registriert seit: 15. Nov 2004 2.647 Beiträge |
#1
hi!
Delphi Anfänger-Tutorial Dies ist ein nicht so langes Tutorial, wie es scheint. Es kommen viele Code-beispiele drinnen vor. Ich erkläre oft im Code mit Delphi-Tags etwas (// oder {}) Grundvorraussetzungen: Delphi ist Installiert, falls nicht: CD einlegen, Installer starten, Delphi auswählen und installieren. Inhaltsverzeichniss: 2: Typen 3: Komponenten - MainMenu - Label - Button - Edit - Memo - Dialoge - OpenDialog - SaveDialog - ListBox - ComboBox - Panel - GroupBox - CheckBox/RadioButton - RadioGroup - PopupMenu 4: Ein kleiner Rechner 1: Typen Es gibt in Delphi verschiedene Variablen, die einen vollkommen andern Sinn haben. Integer : ganze Zahlen Byte : natürliche Zahlen Boolean : Boolischer Wert (True oder False) Real : reele Zahlen String : Zeichenkette Binärdatei : File of Byte, File of Integer, File of Char, File of RecordTyp Es gibt globale Variablen. sie werden in var deklariert. Str: String; Str ist die Variable. Einer Variable wird immer ein Typ zugewiesen (in dem Fall String). man kann auch in jede procedure var hinschreiben und dahinter/drunter die variablen schreiben 3: Standart Komponenten - MainMenu | Hauptmenü Das Hauptmenü (TMainMenu) dient dazu am oberen Fensterrand ein kleines Menü darzustellen, z.B. Datei | Bearbeiten | Ansicht | Hilfe Wenn man auf Datei klickt, erscheint meistens ein 'Untermenü'. Z.B. Neu | Öffnen | ... Starten sie Delphi. Nun breitet sich Delphi vor ihnen aus. In dem oberen Fenster gibt es eine Komponenten Palette (Standart | Zusätzlich | ...). Wählen sie Standart aus. Unter Standart erscheinen jetzt viele Komponenten. Fahren sie mit der Maus über eine Komponente und es erscheint ein Hinweis (Hint), welche Komponente es ist. Wählen sie 'MainMenu' mit einem Klick auf die komponente aus. Gehen sie nun mit der Maus zur Form (z.B. Form1). Klicken sie ebenfalls. Nun wurde eine Komponente auf der Form eingefügt. Um ein Menü zu erstellen, müssen sie erst Delphi sagen, welche Items angezeigt werden sollen, sonst wird das Menü nicht angezeigt. Entweder klicken sie doppelt auf die Komponente auf der Form, oder sie wählen den Objektsinspector aus und klicken (wenn sie das MainMenu auf der Form ausgewählt haben) auf Items. Hinter '(menü)' erscheinen jetzt drei Punkte. Klicken sie drauf und es erscheint ein weiteres Menü. Ein Menü besteht grundsätzlich aus MenuItems. Im Objectinsceptor sollte bei ihnen das Item '<Unbenannt' ausgewählt sein. Nachdem sie auf 'Caption' geklickt haben, erscheint dahinter ein textfeld (eigentlich edit). Tippen sie z.B. '&Datei' ein. Wenn man vor einem Buchstaben ein '&' schreibt, wird dieser unterstrichen. Klicken sie in dem MainMenu-Editor auf den vorherig eingegebenen Text. Nun erscheint ein SubMenuItem. Wenn sie drauf klicken, können sie wieder mit Caption einen Text eintippen. Kehren sie nun zur Form zurück und klicken doppelt darauf (sie können auch im Objectinspector unter 'Ereignisse\OnCreate gehen'). Um den Text abzuändern, müssen sie folgenden Code verwenden:
Delphi-Quellcode:
[Nicht das sie es falsch verstehen: das Code/Editor Fenster erscheint und FormCreate ist bereits vorhanden, sie müssen also nur noch
procedure TForm1.FormCreate(Sender: TObject);
begin MainMenu1.Items[0].Caption := '&Hier stand mal Datei!'; end; MainMenu1.Items[0].Caption := '&Hier stand mal Datei!'; einfügen] Sie können auch auf ein MenuuItem oder SubMenuItem doppelt klicken und sie gelangen zu dem Code-Editor, dann können sie dort ihren Code eintragen, der aufgerufen werden soll, falls der Benutzer auf das MenuItem oder SubMenuItem klickt. Beispiel:
Delphi-Quellcode:
So sieht das Grundgerüst aus:
procedure TForm1.Neu1Click(Sender: TObject);
begin MainMenu1.Items[0].Caption := '&Sie haben gerade auf ein SubMenuItem geklickt!'; end;
Delphi-Quellcode:
Und hier der bisherige vollständige Code:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} end.
Delphi-Quellcode:
Items sind die MainMenu Items (deshalb ja auch MainMenu1.). Wenn sie ':=' eingeben erwartet delphi einen weiteren Befehl (Je nach dem was davor steht).
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Neu1: TMenuItem; procedure FormCreate(Sender: TObject); procedure Neu1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin MainMenu1.Items[0].Caption := '&Hier stand mal Datei!'; end; procedure TForm1.Neu1Click(Sender: TObject); begin MainMenu1.Items[0].Caption := '&Sie haben gerade auf ein SubMenuItem geklickt!'; end; end. Es hat sich nicht viel verändert, außer das zwei proceduren hinzugekommen sind und, dass sich auf der Form und im type etwas verändert hat. Es gibt auch noch funktionen (function), denen man den Wert zuweisen kann. Mit constructors werden wir uns in diesem Tutorial noch nicht rumschlagen. - Label Ein Label ist dazu da, um dem Benutzer z.B. bei Fehlern die Fehlermeldung auf elegante Weise mitzuteilen. Oder um z.B. in einem Player den Status anzuzeigen (Play, Stop, Pause, ...) Man kann aber dem Label genauso viel oder sogar mehr zuteilen als einem MainMenu. Wir könnten den selben Code auch in einem OnClickEreigniss (haben wir eben bei dem SubMenuItem auch schon verwendet) aufrufen und dem Label noch einen anderen Text zuweisen. Falls die größe bei keiner Komponente oder Form angepasst werden soll, stellen sie einfach AutoSize auf False (False = fehlgeschlagen, True = in etwa in Ordnung). Dies geschieht wie in dem MainMenu mit der Cpation, bloß dass sie einfach auf den nach unten deutenden Pfeil klicken und auf 'False' klicken. Mit True schalten sie AutoSize wieder ein. Die Zeile in OnCreate können sie mit // am Anfang der Zeile ausklammern, sie können für mehrere Zeilen { ... } nehmen.
Delphi-Quellcode:
Fügen sie die erwähnte Komponente immer ein, dann muss ich es nicht immer sagen.
procedure TForm1.Label1Click(Sender: TObject);
begin MainMenu1.Items[0].Caption := '&Hier stand mal Datei!'; Label1.Caption := 'MainMenu.Items[0].Caption wurde abgeändert!'; end; Nun wird wieder der Text des MainMenus abgeändert und der Label zeigt nun 'MainMenu.Items[0].Caption wurde abgeändert!' an. - Button Ein Button ist eine Schaltfläche. Wenn man auf einen Button klickt oder Enter/Return drückt, wird immer etwas neues ausgeführt. - Edit Ein Edit ist ein einzeiliges Textfeld. Wir können dem Edit Enter zuweisen.
Delphi-Quellcode:
Wenn sie Form1. eintippen erscheint die Programmierhilfe. Mit 'Form1.Color :='
procedure TForm1.Button1Click(Sender: TObject);
begin Form1.Color := clRed; end; procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key= VK_RETURN then Button1Click(Sender); end; können sie die passende Farbe bestimmen. if ... then = wenn ... dann VK_RETURN = Überprüfung, ob enter gedrückt wurde (ohne if, then geht das nicht) Es gibt Parameter, wenn man eine procedure aus einer anderen procedure ausführen will, muss man den Parameter angeben, damit Delphi weiß, was es tun muss. Bei so Sachen wie OnClick ist es immer 'Sender'. Sie können sich die procedure anschauen und den Parameter bestimmen. Eine Zeile wird immer mit einem ';' beendet. Egal was sie in das Edit eintippen und Enter drücken, es kommt immer das selbe raus. Im folgenden Beispiel wird gezeigt, wie man per Button eingabe und Enter drücken zum selben Ergebnis kommt, bloß das nicht immer das Selbe raus kommt.
Delphi-Quellcode:
In den Klammern steht der alte Code. Auf ein begin folt immer ein end;. Sie können nur if ... then eintippen, aber nicht ein einzelnes Wort.
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin { if Key= VK_RETURN then Button1Click(Sender); } if Key= VK_RETURN then begin if Edit1.Text = 'button' then Button1Click(Sender); Edit1.Clear; end; end; 'if Edit1.Text = 'button' then Button1Click(Sender);' = Wenn sie button eintippen, dann ... . 'Edit1.Clear' = Text löschen. - Memo Ein Memo ist ein (mehrzeiliges) Textfeld.
Delphi-Quellcode:
In diesem Beispiel wird gezeigt, wie man den Text des Edits in das Memo schreiben kann.
procedure TForm1.Button2Click(Sender: TObject);
begin Memo1.Lines.Add (Edit2.Text); end; procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key= VK_RETURN then begin // text des zweiten edits in das Memo schreiben // erste Methode Memo1.Lines.Add (Edit2.Text); // zweite Methode Button2Click(Sender); // text löschen Edit2.Clear; end; end; Durch das 'Lines.Add' wird nach jedem Enter drücken der Text des Edits in eine neue Zeile des Memos geschrieben. Passen sie das Hauptmenü so an: - Datei |- Neu |- Öffnen |- Speichern |- Speichern unter ... |- - |- Beenden Bitte fügen sie den SaveDialog, OpenDialog auf die Form ein.
Delphi-Quellcode:
Nun können sie schon Texte neu erstellen, speichern, öffnen und das Programm durch das MainMenu beenden.
procedure TForm1.Neu1Click(Sender: TObject);
begin // Memo Inhalt löschen Memo1.Clear; // MainMenu1.Items[0].Caption := '&Sie haben gerade auf ein SubMenuItem geklickt!'; end; procedure TForm1.ffnen1Click(Sender: TObject); begin // OpenDialog anzeigen if OpenDialog1.Execute then { ein OpenDialog hat immer eine Zeile, die sich Filename nennt, dort wird angegeben, welche Datei geladen werden soll. Das Memo hat eine Funktion, mit der man eine Datei einfach ins Memo laden kann. Da der OpenDialog ja immer die ausgewählte Datei unter Filename einträgt, muss man nur OpenDialog1.Filename angeben. } Memo1.Lines.LoadFromFile(OpenDialog1.FileName); end; procedure TForm1.Speichernunter1Click(Sender: TObject); begin // Das Selbe wie beim OpenDialog, bloß dass es gespeichert wird if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName); end; procedure TForm1.Speichern1Click(Sender: TObject); begin // falls try // überprüft, ob die Datei schon vorhanden ist und speichert if SaveDialog1.FileName <> '' then Memo1.lines.savetofile(SaveDialog1.FileName); // dann except // es wird eine Meldung ausgegeben, falls ein Fehler auftritt ShowMessage ('Fehler beim Speichern der Datei!'); end; end; procedure TForm1.Beenden1Click(Sender: TObject); begin // Programm beenden Close; end; - ListBox Eine Listbox ist nichts anderes als eine normale Liste, auf die man zugreifen kann, z.B. Items hinzufügen entfernen. Jetzt wird es schon komplizierter. Im folgendem Beispiel wird gezeigt, wie man in eine Listbox Text-Dateien laden und speichern kann und sie wieder aus der Listbox entfernen kann (Items).
Delphi-Quellcode:
Man muss die Begriffen wirklich können. Das kommt aber mit der Zeit.
procedure TForm1.Button3Click(Sender: TObject);
begin // ist uns schon vom Memo bekannt if OpenDialog1.Execute then Listbox1.Items.Add(OpenDialog1.FileName); end; procedure TForm1.Button5Click(Sender: TObject); var filename: string; ItemIndex: integer; begin // bevor Fehler auftreten abbrechen itemindex := ListBox1.ItemIndex; if ItemIndex = -1 then exit; // wir haben filename als Variable angegeben und müssen noch definieren, //was sie machen soll filename := ListBox1.Items.Strings[ListBox1.ItemIndex]; // da der Pfad der Datei in der Listbox steht, müssen wir nur den oben // ermittelten filename laden // sie können mehrere Dateien in hinzufügen und dann beliebig eine auswählen // und es wird nur die ausgewählte geladen Memo1.Lines.LoadFromFile(filename); end; procedure TForm1.Button4Click(Sender: TObject); var i: integer; begin // ausgewähltes Item löschen i := ListBox1.ItemIndex; if i >= 0 then ListBox1.Items.Delete(i); end; procedure TForm1.Button6Click(Sender: TObject); var i: integer; begin i := ListBox1.ItemIndex; if i >= 0 then // speichert alles auf die ausgewählte Datei ab Memo1.Lines.SaveToFile(ListBox1.Items.Strings[ListBox1.ItemIndex]); end; - ComboBox Es soll ja nicht zu kompliziert werden, deshalb nehm ich oft die selben Code-Beispiele um die vielen Möglichkeiten zu zeigen. Fügen sie eine ComboBox auf die Form und tippen sie in OnCreate ComboBox1.Items ein. Fällt ihnen etwas auf ? Eine ComboBox ist eine Art ausklappbare Listbox. Damit ist doch schon viel gesagt ! Wir können mit der ComboBox fast so viel anstellen, wie mit der ListBox. Es ist geschmackssache, ob sie ComboBox oder ListBox nehmen. Für eine playlist im Player können/sollten sie aber eine ListBox nehmen, das macht es dem Benutzer leichter sich zurecht zufinden. Denken sie immer daran, das sich die Programme immer nach dem Benutzer richten müssen. Deshalb sollten auch mehrere Skins zur Verfügung stehen. Löschen sie nun den eben hinzugefügten OnCreate-Code wieder (der war auch nur zum erklären). Klicken sie hinter Items auf (TStrings). Nun erscheint ein kleines Editor-Fenster. Jetzt können sie Items hinzufügen (geht selbstverständlich mit ComboBox1.Items.Add('mach was')). Nun folgt eine kleine Liste, in der erklärt wird, in welche Zeile was rein kommt. 1. Hinzufügen 2. Entfernen 3. Laden 4. Speichern Welche Methode wählen wir für den Code ? Soll er klein sein ? Nehmen wir die Methode, mit der man proceduren aufzuruft.
Delphi-Quellcode:
procedure TForm1.ComboBox1Click(Sender: TObject);
begin //sobald man klickt wird überprüft, worauf man geklickt hat //if ComboBox1.ItemIndex[0] then Button3Click(Sender); // case = fall // of = von // danach kommen zahlen für index und das ereignis case RadioGroup1.ItemIndex of 0: Button3Click(Sender); 1: Button4Click(Sender); 2: Button5Click(Sender); 3: Button6Click(Sender); end; end; - Panel Ein Panel ist eine Fläche mit der man alles überdecken kann. Fügen sie ein Panel auf die Form und stellen sie im Objectinspector BevelOuter und Bevelinner auf bvNone. Nun schneiden sie alle anderen Komponenten [Strg+X, Ctrl+X] aus und fügen sie in den Panel. Stellen sie Align auf alClient. Nun befinden sich alle Komponenten im Panel. - CheckBox/RadioButton Fügen sie vier RadioButtons der Form zu. Wenn mehrere RadioButtons da sind, kann man immer nur einen auswählen. Wenn man CheckBoxen hat, kann man alle auswählen. In der folgenden Tabelle wird erklärt, welcher RadioButton eine bestimmte Beschriftung bekommt. 1. Entfernen 2. Hinzufügen 3. Laden 4. Speichern Ich gebe ihnen jetzt keinen Code. Sie sollten nach der Beschrifftung wissen, was wo hinkommt. Tipp: An jedem RadioButton gibt es ein OnClick ereignis. - RadioGroup In eine RadioGroup kommen mehrere RadioButtons. Kopieren/schreiben sie folgenden Code in den Inhalt des Editors Items.
Code:
Wie immer OnClick ...
Hinzufügen
Entfernen Laden Speichern
Delphi-Quellcode:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin // der selbe Code wie bei der ComboBox, bloß dass RdaioGroup1 davor steht // case = fall // of = von // danach kommen zahlen für index und das ereignis case RadioGroup1.ItemIndex of 0: Button3Click(Sender); 1: Button4Click(Sender); 2: Button5Click(Sender); 3: Button6Click(Sender); end; end; - Popupmenu Ein Popupmenü ist nichts als ein MainMenu, bloß das man es mit rechtsklick öffnet und es muss zugeordnet weden. Fügen sie nun ein, was sie wollen und ordnen den OnClick-Ereignissen wieder etwas zu. In dem Beispielprogramm wird es nichts davon geben. 3: Ein kleiner Rechner Dieses Programm kann addieren, subtrahieren, multiplizieren und dividieren. Integer = Ganzzahl Float = Kommazahl Real = Kommazahl Wir könnten einen Rechner programmieren, der nur Ganzzahl kann. Spätestens beim dividieren kommen die ersten Probleme. Da verlangt er nach 'real'. Es kommen Variablen-umwandlungen vor: StrToInt IntToStr FloatToStr StrToFloat Fügen sie 8 Buttons auf die Form ein. 1. + 2. - 3. * 4. / 5. = 6. = 7. = 8. = Es müssen die letzten 3 '=' Buttons unsichtbar sein. Und der erste Enabled := True. Vier mal '=' ? Warum ? Es ist die einfache Version mit Visible := True [man sieht den Button (False = man sieht den Button nicht)] Fügen sie ein Edit auf die Form ein (machen sie Text einfach frei). Enabled = drauf klicken und es passiert was (true), draufklicken und es passiert nichts (false) Nun fangen wir an: Globale Variablen stehen unter type. Es sollte jetzt so aussehen
Delphi-Quellcode:
Name's der 4 '=' Buttons
var
Form1: TForm1; zahl1, zahl2, ergebnis: real; // zahlen und ergebnis definieren 1. ergebnisbut 2. ergebnisbut2 3. ergebnisbut3 4. ergebnisbut4
Delphi-Quellcode:
Ihr erstes Programm !
// OnCLick-Ereignis von dem plus Button
procedure TForm1.plusClick(Sender: TObject); begin // zahl1 ist die erste Edit eingabe (muss natürlich eine zahl sein) // die Begriffe wie strtofloat sind schon oben erklärt. zahl1 := StrToFloat(Edit1.Text); //Edit inhalt löschen Edit1.Clear; //benötigten BUtton anzeigen und die anderen verstecken ergebnisbut.Enabled := True; ergebnisbut.Visible := True; ergebnisbut2.Visible := False; ergebnisbut3.Visible := False; ergebnisbut4.Visible := False; end; // OnCLick-Ereignis von dem minus Button procedure TForm1.minusClick(Sender: TObject); begin zahl1 := StrToFloat(Edit1.Text); Edit1.Clear; ergebnisbut.Visible := False; ergebnisbut2.Visible := True; ergebnisbut3.Visible := False; ergebnisbut4.Visible := False; end; procedure TForm1.malClick(Sender: TObject); begin zahl1 := StrToFloat(Edit1.Text); Edit1.Clear; ergebnisbut3.Visible := True; ergebnisbut4.Visible := False; ergebnisbut2.Visible := False; ergebnisbut.Visible := False; end; procedure TForm1.geteiltClick(Sender: TObject); begin zahl1 := StrToFloat(Edit1.Text); Edit1.Clear; ergebnisbut4.Visible := True; ergebnisbut3.Visible := False; ergebnisbut2.Visible := False; ergebnisbut.Visible := False; end; procedure TForm1.ergebnisbutClick(Sender: TObject); begin // zweite Zahl festlegen (zweite eingabe) zahl2 := StrToFloat(Edit1.Text); // ergebnis als addition von zahl1 und zahl2 // wenn dort ein - steht, wird subtrahiert (kommt noch) ergebnis := zahl1 + zahl2; //ausgabe im edit // variable muss umgewandelt werden // sie können auch komma rechnen Edit1.Text := FloatToStr(ergebnis); end; procedure TForm1.ergebnisbut2Click(Sender: TObject); begin zahl2 := StrToFloat(Edit1.Text); ergebnis := zahl1 - zahl2; Edit1.Text := FloatToStr(ergebnis); end; procedure TForm1.ergebnisbut3Click(Sender: TObject); begin zahl2 := StrToFloat(Edit1.Text); ergebnis := zahl1 * zahl2; Edit1.Text := FloatToStr(ergebnis); end; procedure TForm1.ergebnisbut4Click(Sender: TObject); begin zahl2 := StrToFloat(Edit1.Text); ergebnis := zahl1 / zahl2; Edit1.Text := FloatToStr(ergebnis); end; Die Typen müssen überall umgewandelt werden, weil sie nicht kompatibel zueinander sind. Die procedure dectoroman müssen sie nicht verstehen. Sie ist halt nur ein Feature. Ich hab sie mal im Internet gefunden. NOCH VIEL SPAß MIT DELPHI ! |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |