Delphi-PRAXiS

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 6. Mär 2020 17:26

Text vor einem bestimmten Zeichen NICHT löschen
 
Hallo und guten Tag,

ich würde von euch eine Möglichkeit erfahren, wie man den Text vor dem Zeichen '>' mit BACKSPACE nicht löscht.

Ich persönlich habe keine, deswegen kann ich auch keinen Code senden...

Sehr freuen würde ich mich auf schnelle Rückmeldungen.
Vielen Dank

Fallenzer 6. Mär 2020 20:18

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Am Anfang steht 'shell>' und alle Zeichen nach > , inklusive > , müssen unversehrt bleiben...

DieDolly 6. Mär 2020 20:19

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Wie oft kommt dieses shell> vor?
Wenn es nur einmalig vorkommt, such die Position mit Pos().

p80286 6. Mär 2020 20:32

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
wie wäre es mit so etwas:
Delphi-Quellcode:
suchstr:='shell>';


p:=pos(suchstr,text);
if p>0 then delete(text,p,length(suchstr)-1);
Gruß
K-H

DieDolly 6. Mär 2020 20:34

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

delete(text,p,length(suchstr)-1);
In dem Fall würde shell> mitgelöscht.

Fallenzer 6. Mär 2020 20:46

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Will ich aber nicht...

DieDolly 6. Mär 2020 20:57

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Dann würde ich sagen: arbeite etwas mit und ändere den Code, den du freundlicherweise zur Verfügung gestellt bekommen hast.

Fallenzer 6. Mär 2020 21:06

AW: Text vor einem bestimmten Zeichen NICHT löschen
 
Temporär habe ich folgendes versucht:

Delphi-Quellcode:
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if key=#08 then
  begin
    if length(Memo1.Lines[0])=6 then key:=#0;
  end;
end;
key #08 ist BACKSPACE laut ASCII, die Länge des Stringes 'shell>' ist 6, und wenn diese Zahl erreicht wird, dann wird die BACKSPACE-Taste blockiert, sodass sich das dadurch nicht löschen lässt...

Für die Erste Zeile des Memos wäre es geschafft...

IceBube 6. Mär 2020 21:37

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

Zitat von Fallenzer (Beitrag 1459105)
Temporär habe ich folgendes versucht:

Delphi-Quellcode:
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if key=#08 then
  begin
    if length(Memo1.Lines[0])=6 then key:=#0;
  end;
end;
key #08 ist BACKSPACE laut ASCII, die Länge des Stringes 'shell>' ist 6, und wenn diese Zahl erreicht wird, dann wird die BACKSPACE-Taste blockiert, sodass sich das dadurch nicht löschen lässt...

Für die Erste Zeile des Memos wäre es geschafft...

Und Zeile 2 ist/sollte ..Lines[1] sein? :)

p80286 6. Mär 2020 21:43

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

Zitat von DieDolly (Beitrag 1459101)
Zitat:

delete(text,p,length(suchstr)-1);
In dem Fall würde shell> mitgelöscht.

Ich werd es nie lernen:oops: ohne Debugger vergallopiere ich mich da immer.

@Fallenzer
warum willst Du unbedingt Backspace nutzen?

Gruß
K-H

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 00:23 Uhr.

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