ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
2151
2151
EMPFEHLEN
-
Hallo, ich habe per Tutorial einen Editor gebaut. Ich bin nun damit fertig, aber egendwie kann ich Run nicht drücken !
Hier erstmal das Tutorial:
http://www.softgames.de/developia/vi...d=13457&page=1
So !
Nun bei mir macht er folgendes:
bei meinem MainMenue der Befehl "Wiederherstellen" setzt er folgendes in Rot:
Kann es sein, dass der Befehl falsch ist?Code :1 2 3 4
procedure TForm1.Wiederhstellen1Click(Sender: TObject); begin [COLOR="Red"]Memo1.Redo;[/COLOR] end;
Bitte um schnelle Antwort.
Gruß Pascal
P.S: Wenn es hilft, ich benutze Delphi 7 (Das Tutorial, ist von Delphi 6, kann es sein, dass es mit von den Versionen unterschiedlich ist?)Geändert von Nohh (19.09.06 um 13:05 Uhr)
-
ich habe eben erkannt, das er alle meine codes rot einfärbt

die alle:
mhCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
procedure TForm1.Schlieen1Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.Rckgngig1Click(Sender: TObject); begin Memo1.Undo; end; procedure TForm1.Wiederhstellen1Click(Sender: TObject); begin Memo1.Redo; end; procedure TForm1.Ausschneiden1Click(Sender: TObject); begin Memo1.Cut; end; procedure TForm1.Kopieren1Click(Sender: TObject); begin Memo1.Copy; end; procedure TForm1.ffnen1Click(Sender: TObject); begin if OpenDialog1.Execute then Memo1.Lines.LoadFromFile( OpenDialog1.FileName); end; procedure TForm1.Speichern1Click(Sender: TObject); begin if SaveDialog1.Execute then Memo1.Lines.SaveToFile( SaveDialog1.FileName); end; end.
Hier habe ich mal mein Projekt für euch als Rar. Datei
>>>DOWNLOAD<<<
-
19.09.06 13:19 #3
- Registriert seit
- Mar 2004
- Beiträge
- 441
Was ich so weit gefunden habe:
Memo1.Redo: Diese Funktion scheint es in der Tat nicht mehr zu geben.
Memo1.Cut: Heisst jetzt Memo1.CutToClipboard;
Memo1.Copy: Heisst jetzt Memo1.CopyToClipboard;
Und du verwendest vielleicht OpenFileDialog1 und SaveFileDialog1 in deinem Source, allein - die Komponenten im Designer konnte ich dazu nicht finden.
-
Mh und wie mach ich das nun? das alles funktioniert?
Gruß
Pascal
-
19.09.06 14:45 #5
- Registriert seit
- Mar 2004
- Beiträge
- 441
Debuggen?
Wenn du den Redo meinst:
Da würde ich mir ein Offscreen Memo anlegen, vor dem Undo den Memo1-Inhalt reinkopieren und im Redo Falle wieder zurück schreiben.
-
Hi,
verstehe nur Bahnhof
habe erst vor ein paar Wochen mit Delphi angefangen (Schule) und jetzt will ich ein wenig zuhause bauen, es wäre nett wenn du mir diese Begriffe alle erklären kannst 
Gruß
Pascal
-
19.09.06 15:01 #7
- Registriert seit
- Mar 2004
- Beiträge
- 441
Na gut, habe gerade sowieso nicht viel Besseres zu tun
:
Der Compiler schreit dich wegen folgender Dinge an:
- Memo1 hat kein Redo
Da habe ich mal kurz die Hilfe bei meinem Compiler aufgemacht und nach TMemo gesucht. Ergebnis: Stimmt. In TMemo gibt es kein Redo. Kurz gegoogelt: In Delphi 5 (und, ich glaube, auch 6) gab es ein einfaches Redo in TMemo, das jetzt jedoch augenscheinlich verschwunden ist. Ramarama, shit happens.
- Memo1 hat kein Cut
Die Hilfe war noch offen, nachgeschlagen: Jup, Cut gibt es nicht in TMemo. Aber eine Methode namens CutToClipboard. Sollte mich schon sehr schwer wundern, wenn die nicht das Gewünschte macht, nur unter einem anderen Namen.
- Memo 1 hat kein Copy
SSDC (same shit, different color): Auch Copy gibt es nicht mehr, ich halte die Methode CopyToClipboard für den heissesten Ersatzkandidaten.
OpenFileDialog1 ist eine Komponente. Das ist so ein visuelles Teil, was du im Designer auf dem Formular ablegen kannst. Die Komponente heisst im Designer (oh Wunder) OpenFileDialog. Gleiches gilt für SaveFileDialog. Du beziehst dich irgendwo im Sourcecode sowohl auf OpenFileDialog1 und SaveFileDialog1, hast diese beiden Komponenten aber nicht in deinem Formular platziert.
Was den Redo angeht, so schüttel ich mir mal eben folgende Gedanken aus dem Kragen:
Was soll ein Redo machen?
-> Wenn der Benutzer einen Undo gemacht hat, dann soll der Redo den Undo "undoen".
-> Hä?
-> Der Redo soll den Undo aufheben.
-> Aha. Was macht der Undo?
-> Der Undo nimmt die Änderungen zurück, die ein Benutzer seit dem letzten Speichern oder einer ähnlichen Aktion gemacht hat.
-> Der Redo soll also den geänderten Zustand wieder herstellen
-> Redo soll mir also den Memo-Inhalt wieder herstellen, wenn durch Undo etwas verloren ging.
-> Ich lege mir eine zweite Memo-Komponente in das Formular
-> Memo2.Visible := false;
-> Wenn der Undo durchgeführt wird, kommt so etwas wie Memo2.Text.ToString := Memo1.Text.ToString;
-> Wenn der Redo durchgeführt wird, kommt so etwas wie Memo1.Text.ToString := Memo2.TextToString;
Memo2 ist deswegenn offscreen ("außerhalb" der Bildschirms), weil seine Eigenschaft Visibile deaktiviert wurde und es somit für den Benutzer nicht sichtbar ist - sehr wohl aber für das Programm.
Alle Klarheiten beseitigt?Geändert von CSANecromancer (19.09.06 um 15:10 Uhr)
-
Hi,
ähm
ich denke mal schon !
Aber wie ich das jetzt neu machen soll, ist mir ein rätsel
-
19.09.06 16:00 #9
- Registriert seit
- Mar 2004
- Beiträge
- 441
Seufz... Da fühlt man sich wieder jung.
Aber ist heute echt dein Glückstag. Die Doku zur API hier ist gerade dermaßen trocken, daß es staubt. Da ist dein "extended Hello World" in der Tat interessanter. Also gehen wir es mal an:
Schritt 1: Der Ausgangspunkt
Damit wir auch beide vom Gleichen reden, habe ich mir nochmal dein .rar runtergeladen, in meine IDE geladen und versucht zu compilieren. Das Ergebnis brachte 10 satte Fehler.
Als erstes wird natürlich der Redo bemängelt. Da dessen programmiertechnische Umsetzung etwas mehr als nur zwei, drei Tastendrucke erfordert, deaktiviere ich ihn erstmal:
Der nächste Meckerpunkt ist der Cut. Den wandel ich einfach passend um:Code :1 2 3 4
procedure TForm1.Wiederhstellen1Click(Sender: TObject); begin //Memo1.Redo; end;
Das Gleiche geschieht mit dem Copy:Code :1 2 3 4
procedure TForm1.Ausschneiden1Click(Sender: TObject); begin Memo1.CutToClipboard; end;
Bleiben noch die Dinger mit OpenDialog1 und SaveDialog1. Da sieht die Reparatur recht einfach aus. Du beziehst dich einfach auf die Dialoge, ohne sie deklariert, geschweige denn initialisiert zu haben. Das lässt sich beheben. Ich wechsel vom Sourcecode in den Desinger. In der Tool-Palette (lass dir nur Zeit und suche sie in Ruhe) gibt es eine Rubrik namens "Dialoge". Die erste Komponente in dieser Rubrik heisst auch schon TOpenDialog, die zweite TSaveDialog. Ich lege jeweils eine TOpenDialog- und und TSaveDialog-Komponente auf das Formular. Beide sind sogenannte "nichtvisuelle Komponenten", d.h. sie werden zur Laufzeit nicht so ohne weiteres angezeigt, weswegen es vollkommen sch**ssegal ist, wo im Formular die Dinger platziert werden. Aufgrund der automatichen Namensvergabe heissen die Teile jetzt OpenDialog1 und SaveDialog1.Code :1 2 3 4
procedure TForm1.Kopieren1Click(Sender: TObject); begin Memo1.CopyToClipboard; end;
Ich werfe einen kurzen Blick in den Sourcecode - anscheinend wird nichts mehr bemängelt.
Und eine Compilierung bestätigt es mir: 0 Warnungen, 0 Fehler.
Schritt 2: Der verdammte Redo
In einem vorhergehenden Post habe ich ja schon erwähnt, wie ich den Redo sehe und was ich glaube, das er können soll. Jetzt gilt es, das Ganze umzusetzen.
Als erstes wird mal das unsichtbare Memo angelegt. Von der Toolpalette (Rubrik "Standard") ziehe ich ein TMemo auf das Formular. Auch hier ist die Platzierung komplett Wumpe, weil ich mit F11 sofort den Objektinspektor aufmache und die Eigenschaft "Visible" der neuen Memokomponente auf "false" setze.
So, tief durchatmen, nachdenken, im Schritt kratzen. Der Redo kann nur funktionieren, wenn vorher ein Undo erfolgte. Also greife ich als erstes beim Undo in den Source ein:
Was hier passiert ist, daß ich mir vor dem Undo den zuletzt aktuellen Text in Memo1 (das ist das sichtbare Textfeld) merke. Da ich zu faul bin, den geschriebenen Text jetzt über Memo1.Lines Zeile für Zeile durchzuackern, greife ich mittels Memo1.Lines.Text einfach auf den gesamten Text zu, als sei er ein einziger String und schaufel in nach Memo2.Code :1 2 3 4 5
procedure TForm1.Rckgngig1Click(Sender: TObject); begin Memo2.Lines.Text := Memo1.Lines.Text; Memo1.Undo; end;
Jetzt müsste eigentlich auch der Redo gebastelt werden können. Wenn ich einen Undo mache und es mir doch anders überlege, dann soll mir der Redo ja den Text wiederherstellen. Fluggs in die Tasten gehauen:
Ich stelle einfach in Memo1 (der sichtbaren Memo-Komponente) wieder den Text her, den ich mir in der unsichtbaren Memo-Komponente (Memo2) gemerkt habe.Code :1 2 3 4 5
procedure TForm1.Wiederhstellen1Click(Sender: TObject); begin //Memo1.Redo; Memo1.Lines.Text := Memo2.Lines.Text; end;
Mal schauen, was ein Test sagt...
...
...
Tja, prinzipiell funktioniert es bis auf eine Kleinigkeit: Der Cursor wird nach dem Redo nicht auf das Textende positioniert. Aber das ist auch nicht weiter problematisch. Es muß nur eine weitere Zeile in den Redo eingefügt werden:
Diese Zeile bewirkt, daß ich einen Text in Memo1 auswähle. Und zwar beginnt die Auswahl beim letzten Zeichen des Textes und ist... ja, wieviel Zeichen ist die Auswahl denn lang? Da ich dem Programm diesbezüglich keine Information mitteile, schmollt es und nimmt eine Länge von 0 an. Das hat zur Folge, daß der Cursor hinter dem letzten Zeichen steht, aber nichts markiert wird/wurde. Bingo. Genau das wollte ich.Code :1 2 3 4 5 6
procedure TForm1.Wiederhstellen1Click(Sender: TObject); begin //Memo1.Redo; Memo1.Lines.Text := Memo2.Lines.Text; Memo1.SelStart := Length(Memo1.Lines.Text); end;
Schritt 3: Jetzt bist du dran!
Ich hoffe doch sehr, daß du jetzt ein bißchen ein wenigstens minimales Gefühl dafür bekommen hast, wie du mit dem Sourcecode und dem Designer umzugehen hast. F1 (sprich: Die Hilfe) ist auch ein guter Freund. Wenn du zu einer Komponente Informationen suchst, dann tippe einfach T<Komponente> ein. Also für ein Memo z.B. TMemo oder für eine StringList TStringList. usw. Dann bekommst du in den meisten Fällen bereits eine sehr aussagekräftige Hilfe zu den einzelnen Komponenten.
Was du jetzt noch machen kannst:
- Gib den einzelnen Komponenten vernünftige Namen. Nicht nur Memo1 oder so.
- Gib den einzelnen Komponenten vernünftige Anfangswerte: Lösche beim Neustart des Systems den Inhalt des (jetzigen) Memo1. Lege ordentliche Dateifilter für die Dialoge an etc.
- Verstehe das Programm. Und wenn du jede einzelne Funktion in der Hilfe nachschlagen musst, dann ist das auch keine Schande. Jeder fängt mal klein an.
- Wenn du wirklich was knabbern willst (aber für 1 Woche Delphi ist das dann schon ein sehr harter Brocken, denke ich), dann schmeiss Memo2 wieder raus und lege dir im Sourcecode als private member des Formulars eine StringList an. Diese ersetzt dann Memo2 (da nur die StringList verwendet wird). Gaaanz ruhig, keine Panik. Hier die Stichwörter, mit deren Hilfe du in der Delphi-Hilfe und im Internet Hilfe dazu finden kannst:
- Dynamische Objekte
- Konstruktor
- Destruktor
- OnFormCreate
- OnFormClose
Wenn dir das hier immer noch nicht weiterhilft, dann weiss ich auch nicht mehr weiter.
So, zurück zur API... seufz...
-
Hi,
das is ja mal ziemlich kompliziert
bei mir ist alles auf Englisch
daher fin dich net wirklick die Tool-Palette und die Hilfe macht mich noch mehr bekloppt
Bisheriger Editor:
Download
und ja vielen vielen Dank, für deine Antwort, die doch ziemlich lang ist
ich danke dir !
P.S. Ich glaube, ich bin einfach zu müde um solch schwere Texte zu verstehen
Gruß
Pascal
-
20.09.06 07:57 #11
- Registriert seit
- Mar 2004
- Beiträge
- 441
So mag es einem am Anfang vorkommen.
Zitat von Nohh
Also ich kann dir nur raten: Solltest du dich ernsthaft für Programmierung interessieren, dann lerne Englisch auf jeden Fall. Du glaubst gar nicht, wie oft du zu etwas nur eine englische Dokumentation in die Finger bekommst. Wenn du dann kein vernünftiges Englisch verstehst, bist du chancenlos. Also nicht davon einschüchtern lassen. Englisch ist auch nicht viel schwerer als eine Programmiersprache.
Zitat von Nohh
Tja,die verdammten Maschinen. Die werden einfach nicht müde, im Gegensatz zu den Programmierern.
Zitat von Nohh
Ich würde dir auch noch empfehlen, dir mal eine richtig vernünftige Delphi-Dokumentation oder ein Tutorial zu suchen und das von A bis Z durchzuarbeiten und (viel wichtiger) zu verstehen. Und damit meine ich nicht "ich zeige euch jetzt, wie ihr mit wenigen Mausklicks ein Notepad basteln könnt". Aus so etwas lernt man eher weniger als aus so trockenen Kursen, in denen einem gesagt wird, was Konstruktoren sind, Destruktoren, Arrays, dynamische und statische Arrays und Objekte, Speicherverwaltung, OOP etc.pp.
Empfehlung kann ich da leider keine aussprechen, da ich diese ganzen Sachen in C++ gelernt habe und dann eher zufällig in Delphi reingestolpert bin.
-
20.09.06 08:36 #12
- Registriert seit
- Jul 2003
- Ort
- Montreal (Quebec)
- Beiträge
- 1.661
Ich habe mit Basic programmieren gelernt und bei Pascal dann noch mal *richtig* von Vorne angefangen
(und seit neustem gibt es ja wieder die Turboserie - kostenlos: http://www.turboexplorer.com)
Lernen durch ausprobieren. Die Borlandhilfe und -dokus sind sehr gu, die Hilfen im Netz ebenso.
http://www.dsdt.info/
http://delphipraxis.net/
Auch wenn die hier beschriebenen Hilfen in deutscher Sprache vorliegen solltest Du *dringend* des Englischen mächtig sein, schon allein um auch auf ebensolche Hilfe zurückgreifen zu können und damit Deine Nachschlagebasis enorm zu vergrößern.
-
hi,
mit welchem Befehl kann man alles markieren?
MfG
Ähnliche Themen
-
Wichtige Fragen und Große Probleme bei MDL Editor(Auch MED Editor)
Von Samus Aran im Forum Sonstige 3D-ProgrammeAntworten: 0Letzter Beitrag: 14.06.07, 18:41 -
Mein Problem mit Material Editor (versuch 2)
Von EbolaV im Forum 3D Studio MaxAntworten: 2Letzter Beitrag: 01.11.04, 15:04 -
Eigenen Editor in Editor-Liste des IE hinzufügen
Von MrPHP im Forum .NET ArchivAntworten: 0Letzter Beitrag: 10.05.04, 14:07 -
PHP-Editor
Von dozi im Forum PHPAntworten: 19Letzter Beitrag: 01.03.02, 08:09 -
php editor
Von Montz im Forum PHPAntworten: 6Letzter Beitrag: 02.10.01, 17:50





Zitieren

Login




