Ergebnis 1 bis 20 von 47

Thema: Delphi - Fragen!

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    (Delphi-)Frage

    Wie kann man ein Wort in seine Buchstaben zerlegen lassen / bzw. ist das überhaupt möglich?

  2. #2
    Nun, du kannst auf die Einzelnen Buchstaben zugreifen, wie du auf ein Array zugreifst:

    Code:
    var
      S: String;
    begin
      S := 'Hallo';
      if S[1] = 'H' then
      [...]
    end;
    Beachten solltest du die Länge des Strings (Length(S)), da es sonst Zugriffsverletzungen gibt. Außerdem fängt dieses String-Array bei 1 und nicht bei 0 an, was historische Gründe hat (in Turbo Pascal war das erste Byte die Länge des Strings, somit wahren Strings in TP maximal 255 Char lang, in Delphi ist es nur aus Kompatibilität noch so, Strings können beliebig lang sein).

  3. #3
    Danke.
    Meine neue Frage:
    Wie kann ich von einem Editfeld die maximale Anzahl an eingebbaren Zeichen definieren und wie kann ich nur Zahlen / bzw. nur Buchstaben erlauben lassen?

  4. #4
    Zitat Zitat von PX Beitrag anzeigen
    Danke.
    Meine neue Frage:
    Wie kann ich von einem Editfeld die maximale Anzahl an eingebbaren Zeichen definieren und wie kann ich nur Zahlen / bzw. nur Buchstaben erlauben lassen?
    Im OnKeyPress kannst du einfach das hier machen:
    Code:
    if not ((Key in ['a'..'z']) OR (Key in ['A'..'Z'])) then
      Key := #0;
    bzw.
    Code:
    if not (Key in ['0'..'9']) then
      Key := #0;
    Für Zahlen bieten sich aber auch SpinEdits (Registerkarte: Examples/Beispiele) an. Da kannst du dir mal Min und Max anschauen. Ansonsten ist die maximale Stringlänge bei Edits in MaxLength gespeichert, wer hätte es gedacht

  5. #5
    Passend dazu bräuchte ich jetzt aber noch einen Code/Befehl für Backspace, da es für den Nutzer sonst problematisch wird, wieder etwas aus dem Feld zu löschen; also Backspace und andere wichtige Tasten wie Space sollten irgendwie funktionieren.

  6. #6
    Schau mal hier: http://dsdt.info/grundlagen/codes/vks.php

    VK_BACK oder auch $08. VK_Back wird aber nur für KeyUP/KeyDown gehen.

  7. #7
    Wie baue ich Objektunabhängige Prozeduren richtig ein?
    Beispiel: Beim Klick auf Button X öffnet sich eine Nachricht, dann wird mehrmals hintereinander diese unabhängige Prozedur ausgeführt. Habe mich bereits auf anderen Seiten erkundigt, angeblich soll man die Prozedur über eine Variable einbauen, das ergab mir aber Fehler.

  8. #8
    Zitat Zitat von PX Beitrag anzeigen
    Wie baue ich Objektunabhängige Prozeduren richtig ein?
    Beispiel: Beim Klick auf Button X öffnet sich eine Nachricht, dann wird mehrmals hintereinander diese unabhängige Prozedur ausgeführt. Habe mich bereits auf anderen Seiten erkundigt, angeblich soll man die Prozedur über eine Variable einbauen, das ergab mir aber Fehler.
    Könntest du das näher erläutern? Was meinst du mit Objektunabhängig? Meinst du eine Procedure, die nicht zu einer Klasse gehört?

  9. #9
    Ich meine eine Prozedur, die keinen (Sender: TObject) braucht, sondern dessen Befehle ausgeführt werden, wenn man den Namen der Prozedur innerhalb einer anderen Prozedur aufruft:

    Procedure ABC;
    begin
    ...
    ...
    ...
    end;

    Prozedure XYZ(Sender: TObject);
    begin
    ...
    ABC;
    ...
    end;

  10. #10
    Zitat Zitat von PX Beitrag anzeigen
    Ich meine eine Prozedur, die keinen (Sender: TObject) braucht, sondern dessen Befehle ausgeführt werden, wenn man den Namen der Prozedur innerhalb einer anderen Prozedur aufruft:

    Procedure ABC;
    begin
    ...
    ...
    ...
    end;

    Prozedure XYZ(Sender: TObject);
    begin
    ...
    ABC;
    ...
    end;
    Genauso geht's doch auch. Einfach vor die Procedure in der es aufgerufen wird einfügen. Oder aber es im private/public Bereich der Klasse deklamieren und dann TXYZ. Procedere als Name nutzen, dann wäre die Reihenfolge wieder egal. Auch eine extra Unit dafür anlegen ist möglich. Im Grunde hab ich nur grad keine Ahnung was dein Problem dabei ist.

  11. #11
    Zitat Zitat von Crash-Override Beitrag anzeigen
    Schau mal hier: http://dsdt.info/grundlagen/codes/vks.php

    VK_BACK oder auch $08. VK_Back wird aber nur für KeyUP/KeyDown gehen.
    Habe es noch nicht verstanden.
    Code:
    if not (Key in ['VK_BACK']) then
      Key := #0;
    So geht es nicht...

  12. #12
    Zitat Zitat von PX Beitrag anzeigen
    Habe es noch nicht verstanden.
    Code:
    if not (Key in ['VK_BACK']) then
      Key := #0;
    So geht es nicht...
    Klick mal mit gedrückter CTRL/STRG Taste auf VK_BACK und du wirst sehen es ist eine Vordefinierte const (VK_BACK = 8; in der Unit "Windows"). Aber Key ist wie du oben siehst ein Char (oder ein Byte im Grunde, da es ASCII Chars bis max. Nr. 255 sind. Also schreibst du entweder #8 (Das sagt Delphi du möchstest einen Char mit dem Wert 8) oder du wandelst deine Konstanze (im Grunde ja auch 8) in ein Char um. Dafür gibt es den Befehl Chr().

    Code:
    procedure TXYZ.OnKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = Chr(VK_Back) then
        // Whatever...
    end;
    OnKeyPress liefert eben nur Char-Werte. OnKeyUp/OnKeyDown liefern dir den Wert als "Word" (= 4Byte Integer also ein normales Integer in Delphi). Hier würde die Umwandlung ausbleiben. Der Unterschied ist die Auslösung der Ereignisse.

    OnKeyDown wird ausgelöst wenn der Nutzer die Taste runterdrückt.
    OnKeyUp wird ausgelöst wenn der Nutzer die Taste loslässt.
    OnKeyPress wird ausgelöst wenn der Nutzer die Taste runterdrückt und zusätzlich nach einiger Zeit wieder, ähnlich wie wenn man in einem Memo "A" gedrückt hält. Zuerst kommt ein "A", wie gewollt und nach einigen Millisekunden viele "A"s mehr und zwar diesmal recht schnell hintereinander, also mit weniger Abstand als das erste und das zweite.

  13. #13
    Wie wird die maximale Charakteranzahl eines Editfeldes begrenzt?

    Edit: Achja, wie lautet eigentlich der Tastencode für Enter?

    Geändert von Expresseon (07.01.2008 um 18:40 Uhr)

  14. #14
    Enter == Return -> #13, VK_RETURN 0D Return-Taste

    Ich wuerde allerdings immer die VK_* Konstanten verwenden. Zum einen erleichtert das die Portierbarkeit des Programms, zum anderen ist es auch fuer dich leichter lesbar.

  15. #15
    Einige Bilddateien liegen in einem normalen Ordner meines projektes und werden durch den Pfad ganz einfach gerufen:
    Code:
    ... LoadFromFile('Bilder\Bild 1.bmp') ...
    Das funktioniert auch prima. Nur möchte ich den Bilderordner verschlüsseln, bzw. in ein Archiv stecken, damit nicht jeder die Dateien so einfach einsehen kann. Wie muss ich jetzt den Pfad zum aufrufen der Bilddateien ändern?

    Edit: Möchte immernoch wissen: Wie wird die maximale Charakteranzahl eines Editfeldes begrenzt?
    Außerdem interessiere ich mich für eine Art "Screenshotsperre" innerhalb eines gesamten Delphiprojektes, falls es so etwas gibt.

    Geändert von Expresseon (10.01.2008 um 18:57 Uhr)

  16. #16
    Das haengt wohl von deiner Verschluesselung bzw. deinem Archiv ab.
    IdR kannst du auf sowas nicht einfach so wie auf ein Dateisystem zugreifen.
    Die einfachste Variante waere wohl, die Dateien zu entschluesseln (wie das geht, musst du deiner Verschluesslungs- oder Archivierungsbibliothek entnehmen), die z.B. im lokalen Temp Ordner zu speichern, darauf ein LoadFromFile zu machen und am ende wieder zu loeschen.

    Es kann auch sein, dass es eine LoadFromStream oder LoadFromMemory Methode gibt, aber dafuer wuerde ich jetzt auf anhieb nicht die Hand ins Feuer legen. ist bei mir schon etliche Jahre her. Ansonsten gibt es immer noch die Moeglichkeit, mit der (Windows-)API direkt aus dem Speicher ein Bitmap-Objekt zu erstellen und mittels bitblt auf den Canvas deiner Zeichenflaeche zu blitten (Stichwort: TBitmap.Handle bzw TCanvas.Handle).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •