| 
| Autor | Beitrag |  
| Weyoun Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Di 05.11.13 18:22 
 
Moin,
 ich arbeite gerade an einem Programm und weiß nicht, wo im folgenden Code der Fehler ist. 
 Es wäre nett, wenn ihr mir helfen könntet. Das Problem scheint die delete-Anweisung zu sein. 
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 
 | procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);var taste,s1:string;
 begin
 taste:=edit1.text;
 s1:=taste;
 if key=13 then checkclick(sender);
 if key=10 then neuclick(sender);
 if key>32   then
 Delete(s1,length(s1),1);
 end;
 |  ich weiß, dass S1 unnötig ist, da ich bereits taste habe. Den Kommentar könnt ihr auch ignorieren. Lazarus markiert:
 		                       Delphi-Quelltext 
 									| 1:
 |   Delete(s1,length(s1),1);					 |  als falsch mit der Fehlermeldung 'Illegal Expression'. S1 ist der Inhalt des Eingabefeldes Edit1. Davon soll das letzte Zeichen gelöscht werden. Ich möchte am Ende deshalb:
edit1.text:=s1  oder taste.
 Danke im Voraus für eure Hilfe,
 euer Weyoun.
Moderiert von  Martok: Delphi-Tags hinzugefügt |  |  |  
| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Di 05.11.13 18:32 
 
Also, ich habe das mit Lazarus mal genau so (s. u.) getestet. Das funtioniert. Weiß nicht, wo Du da wirklich einen Fehler hast, vielleicht bei neuclick oder  checkclick?
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 
 | procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);var taste,s1:string;
 begin
 taste:=edit1.text;
 s1:=taste;
 if key>32   then
 Delete(s1,length(s1),1);
 end;
 | _________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 |  |  |  
| Weyoun Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Di 05.11.13 18:44 
 
Danke, für deine Antwort. Ich habe keine Ahnung warum, aber es geht immer noch nicht    . Ich habe deinen Code kopiert und es versucht. Es klappt einfach nicht. Ich habe auch vor und hinter delete simple Anweisungen gesetzt, um herauszufinden, ob es wirklich an delete liegt. Und das tut es laut Lazarus.
 Hier der ausgetestete Code:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 
 |     procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);var taste,s1:string;
 begin
 taste:=edit1.text;
 s1:=taste;
 if key>32   then  begin
 label1.caption:='2';
 Delete(s1,length(s1),1);
 label1.caption:='1';
 end;
 label1.caption:='23';
 
 end;
 |  Hast du eine Idee, woran es liegen könnte?
 @Martok: Danke, für die Tags   . Nach meinem ersten Beitrag dachte ich, Code würde automatisch erkannt. Jetzt werde ich aber immer Tags setzen.
Moderiert von  Martok: Delphi-Tags hinzugefügt |  |  |  
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Di 05.11.13 19:39 
 
Wie ist es mit System.Delete? Möglicherweise hast Du eine Unit eingebunden, die auch über eine Delete-Prozedur oder -Funktion verfügt, aber eine andere Parameterliste hat. Für diesen Beitrag haben gedankt: Tranx
 |  |  |  
| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Mi 06.11.13 06:44 
 
Das wird es wohl sein. Denn es gibt mehrere Objekte, die eine Delete.Prozedur besitzen. Allerdings müsste dann diese Deleteprozedur in TForm1 selber definiert sein. Ansonsten würde Lazarus ja mitteilen, dass er die Delete-Prozedur nicht kennt. Allerdings hoffe ich, dass Delete auch in der System-Unit (wie bei Delphi) definiert ist, und nicht woanders. _________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 |  |  |  
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Mi 06.11.13 09:29 
 |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mi 06.11.13 09:30 
 
Trotzdem muss es so etwas sein. Lazarus zeigt aber wie Delphi beim Drüberhalten der Maus an woher die Prozedur kommt (leider mit starker Verzögerung) und springt zur Deklaration mit Strg + Klick. Man kann also leicht sehen woher die Prozedur kommt und wie sie dort deklariert ist.
 	  |  Tranx hat folgendes geschrieben  : |  	  | Allerdings hoffe ich, dass Delete auch in der System-Unit (wie bei Delphi) definiert ist, und nicht woanders. | 
 systemh.inc glaube ich, hab hier kein Lazarus. |  |  |  
| Martok 
          Beiträge: 3661
 Erhaltene Danke: 604
 
 Win 8.1, Win 10 x64
 Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
 
 | 
Verfasst: Mi 06.11.13 13:30 
 
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
 |  |  |  
| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Mi 06.11.13 14:49 
 
Ich würde wie folgt vorgehen:
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 
 |     var
 s1, taste : string;
 lStr : integer;
 begin
 taste:=edit1.text;
 s1:=taste;
 if key>32   then  begin
 label1.caption:='2';
 lStr := Length(s1);        Delete(s1,lStr,1);
 label1.caption:='1';
 end;
 label1.caption:='23';
 
 | _________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 |  |  |  
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Mi 06.11.13 15:16 
 
Oder ohne Delete:
 		                       Delphi-Quelltext 
 									| 1:
 | s1 := Copy(s1, 1, Length(s1) - 1);					 |  |  |  |  
| Weyoun Ehemaliges Mitglied
 Erhaltene Danke: 1
 
 
 
 
 | 
Verfasst: Mo 11.11.13 18:36 
 
Moin. 
 Ich war so blöd    Ich hatte einen Button delete genannt. Lazarus ist also dadurch durcheinander gekommen.
 Trotzdem danke, für eure Hilfe. Für diesen Beitrag haben gedankt: Horst_H
 |  |  |  
| baumina 
          Beiträge: 305
 Erhaltene Danke: 61
 
 Win 7
 Delphi 10.2 Tokyo Enterprise
 
 | 
Verfasst: Di 12.11.13 07:25 
 
Um so etwas zu vermeiden, ist es sinnvoll eine einheitliche Namensgebung zu verwenden. z.B. heißen alle Buttons btn_[irgendwas] (in deinem Beispiel dann btn_delete) Formulare heißen frm_[irgendwas], Editfelder ed_[irgendwas], Labels lb_[irgendwas] usw. Damit vermeidest du Namenskonflikte und weißt selber sofort welche Objekte sich hinter den Variablennamen verstecken. |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 12.11.13 10:42 
 
Und am besten ohne Unterstrich, z.B. btnDelete. (Denn der Unterstrich ist in Delphi höchst unüblich um nicht zu sagen verpönt, abgesehen von Windows Messages oder ähnlichen aus fremden Definitionen übernommenen Bezeichnern. Denn in Delphi wird in der Regel Camel Case benutzt, das reicht als Trennung ja.)
 Das nennt sich übrigens ungarische Notation.
 
 Es hat auch den Vorteil, dass du nur z.B. btn schreiben und Strg + Leertaste drücken musst um alle Buttons des Formulars zu sehen. So findet mal die sehr schnell auch ohne den konkreten Namen 100%ig zu wissen.
 Für diesen Beitrag haben gedankt: baumina
 |  |  |  
| baumina 
          Beiträge: 305
 Erhaltene Danke: 61
 
 Win 7
 Delphi 10.2 Tokyo Enterprise
 
 | 
Verfasst: Di 12.11.13 11:12 
 
Gibt es dafür eigentlich irgendwo eine Liste im Internet wie man was in Delphi am Besten benamst, irgendetwas einheitliches? |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 12.11.13 11:32 
 
Es gibt den Object Pascal Style Guide:
 	  | edn.embarcadero.com/article/10280 hat folgendes geschrieben: |  	  | Except in header translations, do not use underscores to separate words. Class names should be nouns or noun phrases. Interface or class names depend on the salient purpose of the interface. 
 GOOD type names:
 AddressForm, ArrayIndexOutOfBoundsException
 
 BAD type names:
 ManageLayout         // verb phrase
 delphi_is_new_to_me  // underscores
 | 
 Für diesen Beitrag haben gedankt: baumina
 |  |  |  
| baumina 
          Beiträge: 305
 Erhaltene Danke: 61
 
 Win 7
 Delphi 10.2 Tokyo Enterprise
 
 | 
Verfasst: Di 12.11.13 11:49 
 
Das ist gut zu wissen, danke dir. Mein (damaliger) Chef hat vor 10 Jahren mal innerhalb unserer Firma bestimmt, wie wir bestimmte Objektvariablen benennen sollten. Nach meinem Jobwechsel habe ich das einfach beibehalten (dummerweise mit Unterstrich). Das werde ich mir nun abgewöhnen (als alleiniger Programmierer unserer Firma muss ich das mit niemanden absprechen), aber um mir gleich etwas vernünftiges anzugewöhnen würde mich eben interessieren, ob sich da mal paar Delphi-Programmierer zusammengesetzt haben und Namenskonventionen entworfen haben wie dann z.B. Formulare, Editfelder, Labels, Comboboxen, Checkboxen etc. lauten sollten. 
 Edit: Nicht dass ich bei erneutem Jobwechsel von allen anderen ausgelacht werde, warum ich so seltsame Namen meinem Variablen gebe.   |  |  |  
| WasWeißDennIch 
          Beiträge: 653
 Erhaltene Danke: 160
 
 
 
 
 | 
Verfasst: Di 12.11.13 13:44 
 
Ich glaube nicht, dass es da eine Art Standard gibt. Ich persönlich habe mir einen 3-stelligen Präfix angewöhnt: lbl für TLabel, frm für TForm, edt für TEdit usw. Übrigens bietet IIRC das cnPack die Möglichkeit, automatisch Präfixe zu vergeben, man muss die dann nur einmalig festlegen. Kann aber auch sein, dass ich das mit einem anderen IDE-Enhancement verwechsle. |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Di 12.11.13 14:05 
 
Da gibt es keinen Standard. Standard ist nur, dass in Delphi keine ungarische Notation für normale Variablen verwendet werden sollte. Für Komponenten ist es umstritten, ich selbst befürworte es, da es mehrere Vorteile, aber keine echten Nachteile gibt. |  |  |  
| Tranx 
          Beiträge: 648
 Erhaltene Danke: 85
 
 WIN 2000, WIN XP
 D5 Prof
 
 | 
Verfasst: Di 12.11.13 16:36 
 
Ich habe mir angewöhnt, für Variablen einen 2-3-stelligen Präfix zu wählen. 
 es sind 2-3 Kleinbuchstaben vor dem eigentlichen Namen, der mit einem Großbuchstaben beginnt.
 
 z.B.
 
 poTabelle, giIndex, lasText
 
 der erste Buchstabe bestimmt die Stelle der Definition (p für Parameter, g für global, l für lokal ...)
 
 der zweite Buchstabe ist entweder ein a für Array oder z.B. o für Objekt, i für integer ...
 
 Für mich ergibt sich der Vorteil, dass ich im Codetext sofort sehe, welche Variable ich nutze (lokal, global, in Klassen, Records, ...) und um welchen Typ es sich handelt. Und ich kann Namen wie Text, Name, Color ..., die ja oft Eigenschaftsnamen von Objekten sind, als Variablennamen verwenden, ohne dass es Konflikte geben kann, denn es gibt ja keine Eigenschaftsnamen psText, lsText oder gsName .....
 
 Und eine Änderung des Namens einer Variablen ist viel sicherer.
 
 Indices wie i,n,... und von Delphi benutzte Namen wie Sender, Key, Shift, HWnd belasse ich wie gehabt.
 
 Sicher, die Namensbezeichnung klingt irgendwie komisch, aber ich habe festgestellt, dass ich wirklich schneller Probleme erkennen kann und nicht Gefahr laufe, was ganzanderes zu tun, als ich eigentlich wollte. Außerdem, da ich Prozeduren, Funktionen und Properties grundsätzlich am Anfang groß schreibe, sehe ich auch gleich sofort, was eine Variable udn was eine Prozedur/Funktion/Property ist.
 
 Ist nur eine Idee. Kann ja jeder anders handhaben.
 _________________ Toleranz ist eine Grundvoraussetzung für das Leben.
 |  |  |  
| baumina 
          Beiträge: 305
 Erhaltene Danke: 61
 
 Win 7
 Delphi 10.2 Tokyo Enterprise
 
 | 
Verfasst: Di 12.11.13 16:44 
 
@Tranx : auch interessant aber ob es nun ein Button oder ein Editfeld ist, erkennst du mit deiner Methode nicht, oder? |  |  |  |