Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Text vor einem bestimmten Zeichen NICHT löschen (https://www.delphipraxis.net/203638-text-vor-einem-bestimmten-zeichen-nicht-loeschen.html)

Fallenzer 7. Mär 2020 11:15

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Ehrlich gesagt weiß ich nicht, was danach passiert ist, aber nun springt das Programm über die Backspace-Taste hinweg, also es werden Zeichen danach auch gelöscht...

DieDolly 7. Mär 2020 13:32

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Um es auf den Punkt zu bringen? Möchtest du eine Kommandozeile nachbauen?

Fallenzer 7. Mär 2020 16:22

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Ich weiß nicht, wieso ich das früher nicht gesagt habe...

DeddyH 8. Mär 2020 07:41

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Wie stelle ich Fragen richtig?

p80286 8. Mär 2020 09:17

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Zitat:

Zitat von Fallenzer (Beitrag 1459132)
Ich weiß nicht, wieso ich das früher nicht gesagt habe...

Dann solltest Du noch einmal in Dich gehen und möglichst genau beschreiben was Du vorhast. Nicht jeder hat eine so gut funktionierende Glaskugel wie DieDolly.

Zitat:

Zitat von Fallenzer (Beitrag 1459124)
Ehrlich gesagt weiß ich nicht, was danach passiert ist, aber nun springt das Programm über die Backspace-Taste hinweg, also es werden Zeichen danach auch gelöscht...

Ist auch ein wenig wirr.

Gruß
K-H

himitsu 10. Mär 2020 14:47

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Es gibt noch viele andere Wege etwas zu ändern:
Einzige wirklich sichere Lösungen:

* den festen unveränderlichen Teil in einer Variable speichern, im OnChange auf dessen Änderung reagieren und bei Bedarf zurücksetzen,
* bzw. immer die letzte Änderung speichern, im nächsten OnChange prüfen ob das Erforderliche noch stimmt und wenn nicht, dann die letzte Änderung verwerfen und die Kopie neu zuweisen (zurücksetzen).
Beispiel: irgendwo etwas kopieren (Strg+C), dann im Edit alles markieren und das Einfügen (Strg+V, Shift-Einfg, Kontextmenü:Einfügen, WM_SETTEXT, WM_PASTE, uvm.)

* Ansonsten bleibt noch Edit.ReadOnly und selbst im OnKeyDown/Up/Press auf Eingaben reagieren und alles selbst zu machen, inkl. Prüfungen welche die Eingabe verwerfen, wenn es gegen die Regeln verstößt.

Moombas 10. Mär 2020 15:03

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Warum nicht im OnChange:

Delphi-Quellcode:
if copy(Edit.Text, 0, 5) <> 'shell>' then Edit.Text := 'shell>';
if edit.selectionstart <= 6 then edit.selectionstart := length(edit.text); //Grad nicht sicher ob 6 oder 7

Ggf. im OnClick noch:

Delphi-Quellcode:
if edit.selectionstart <= 6 then edit.selectionstart := length(edit.text); //Grad nicht sicher ob 6 oder 7
Alles ungetestet und nur Theorie.

Alternative:
LabeledEdit und im Label das "shell>" Eintragen und (falls notwendig) dann entsprechend in der Edit.Text Verarbeitung dies jedesmal mit hinzufügen (
Delphi-Quellcode:
'shell>' + Edit.Text
bzw.
Delphi-Quellcode:
LabeledEdit.EditLabel.Caption + LabeledEdit.Text
)

himitsu 10. Mär 2020 15:15

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
SelStart beginnt bei 0, aber Copy bei 1 (in VCL/Windows),
also Length passt, wobei
Delphi-Quellcode:
Edit.SelStart := MaxInt;
auch gehn sollte.

PS: Delphi-Referenz durchsuchenStartsStr Delphi-Referenz durchsuchenStartsText Delphi-Referenz durchsuchenContainsText ...
oder zumindestens
Delphi-Quellcode:
if Pos('shell>', Edit.Text) <> 1 then ...


Stringmanipulationen (kopieren/verändern/...) nur zum Prüfen ist immer bissl blöd.

DieDolly 10. Mär 2020 16:23

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Versuchs mal so

Delphi-Quellcode:
const
  FixedShellDummyStringyThingy = 'shell > ';

procedure TForm1.FormCreate(Sender: TObject);
begin
 Width := 979;
 Height := 512;

 Memo1.ScrollBars := ssVertical;
 Memo1.Align := alClient;
 Memo1.WordWrap := True;

 Memo1.Clear;
 Memo1.Lines.Strings[0] := FixedShellDummyStringyThingy;

 Memo1.BevelInner := bvNone;
 Memo1.BevelKind := bkNone;
 Memo1.BevelOuter := bvNone;
 Memo1.BorderStyle := bsNone;

 Memo1.Color := clBlack;
 Memo1.Font.Size := 12;
 Memo1.Font.Color := $00CCCCCC;
 Memo1.Font.Name := 'Consolas';
end;

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if (Key in [VK_UP, VK_DOWN]) then
  Key := 0
 else if Memo1.CaretPos.X <= Length(FixedShellDummyStringyThingy) then
  Key := 0;
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
var
 CurrentLineIndex: Integer;
 CurrentLineStr: string;
begin
 CurrentLineIndex := Memo1.CaretPos.Y;
 CurrentLineStr := Memo1.Lines.Strings[CurrentLineIndex];

 if (Key = #8) and AnsiSameText(CurrentLineStr, FixedShellDummyStringyThingy) then
  begin
   Key := #0;
  end
 else
  begin
   if (Key = #13) then
    begin
     Key := #0;
     Memo1.Lines.Add(FixedShellDummyStringyThingy);
    end
   else
    begin

    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz