Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   & ersetzen, wenn es nicht als && vorkommt (https://www.delphipraxis.net/210887-ersetzen-wenn-es-nicht-als-vorkommt.html)

TurboMagic 26. Jun 2022 12:33

& ersetzen, wenn es nicht als && vorkommt
 
Hallo,

wie kann man am einfachsten einzelne & ersetzen die z.B. in Labels für
sowas benutzt werden: &OK (unterstreicht das O um anzuzeigen, dass Alt-O
diese Aktion auslöst) ohne aber && komplett zu ersetzen?
&& würde ja genutzt, um wirklich ein & in so einem String anzuzeigen und
sollte daher dann ja nur auf & reduziert werden.

Ja, eine eigene Routine wäre schnell geschrieben, aber gibt's da nicht was
vorgefertigtes für?

Grüße
TurboMagic

himitsu 26. Jun 2022 12:56

AW: & ersetzen, wenn es nicht als && vorkommt
 
Delphi-Referenz durchsuchenStripHotkey?

TurboMagic 26. Jun 2022 13:03

AW: & ersetzen, wenn es nicht als && vorkommt
 
Hallo,

möglich, dumm dabei nur, dass man dann eine VCL Unit
in nicht GUI Code (das wäre nämlich im Code zum Auslesen von Produktnamen
aus der DB) einbinden müsste...

Ich schaue mir das aber später mal an.

Grüße
TurboMagic

Uwe Raabe 26. Jun 2022 13:05

AW: & ersetzen, wenn es nicht als && vorkommt
 
Der Code ist nicht kompliziert und wenn du auf die Besonderheiten verzichten kannst, kommst du mit einer abgespeckten Version aus:
Delphi-Quellcode:
function StripHotkey(const Text: string): string;
var
  I: Integer;
begin
  Result := Text;
  I := 1;
  while I <= Length(Result) do
  begin
    if Result[I] = '&' then
      Delete(Result, I, 1);
    Inc(I);
  end;
end;

Redeemer 26. Jun 2022 21:15

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von TurboMagic (Beitrag 1507873)
Hallo,

möglich, dumm dabei nur, dass man dann eine VCL Unit
in nicht GUI Code (das wäre nämlich im Code zum Auslesen von Produktnamen
aus der DB) einbinden müsste...

Was machen Accelerators in der DB?

HolgerX 27. Jun 2022 06:46

AW: & ersetzen, wenn es nicht als && vorkommt
 
Hmm..

Wenn es immer nur um das erste '&' geht, dann würde ein
Delphi-Quellcode:
s := StringReplace(s, '&', '', []);

genau dies tun..

TurboMagic 27. Jun 2022 08:04

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von Redeemer (Beitrag 1507887)
Zitat:

Zitat von TurboMagic (Beitrag 1507873)
Hallo,

möglich, dumm dabei nur, dass man dann eine VCL Unit
in nicht GUI Code (das wäre nämlich im Code zum Auslesen von Produktnamen
aus der DB) einbinden müsste...

Was machen Accelerators in der DB?

Ganz einfach: Benutzer können Produkte anlegen, die dann als Buttons dargestellt werden.
Für diese Buttons können die Nutzer auf diesem Weg Accelerator Keys definieren, was für
Tastaturnutzer hilfreich sein kann.

Danke den vielen Tipps, das ist inzwischen gelöst.

bcvs 27. Jun 2022 08:19

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von TurboMagic (Beitrag 1507895)
Ganz einfach: Benutzer können Produkte anlegen, die dann als Buttons dargestellt werden.

Sollte man dann nicht besser Produktnamen und Button-Beschriftung getrennt voneinander speichern?

Sinspin 27. Jun 2022 12:20

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von HolgerX (Beitrag 1507894)
Delphi-Quellcode:
s := StringReplace(s, '&', '', []);

Das schießt zu kurz. da würde auch die erwünschten doppel & (&&) platt machen.

Das dagegen funktioniert:
Zitat:

Zitat von Uwe Raabe (Beitrag 1507874)
Delphi-Quellcode:
function StripHotkey(const Text: string): string;
var
  I: Integer;
begin
  Result := Text;
  I := 1;
  while I <= Length(Result) do
  begin
    if Result[I] = '&' then
      Delete(Result, I, 1);
    Inc(I);
  end;
end;


DeddyH 27. Jun 2022 12:21

AW: & ersetzen, wenn es nicht als && vorkommt
 
Nein, es würde nur das erste Vorkommen von "&" löschen.

himitsu 27. Jun 2022 12:42

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von Sinspin (Beitrag 1507919)
Zitat:

Zitat von HolgerX (Beitrag 1507894)
Delphi-Quellcode:
s := StringReplace(s, '&', '', []);

Das schießt zu kurz. da würde auch die erwünschten doppel & (&&) platt machen.

Zitat:

Zitat von DeddyH (Beitrag 1507920)
Nein, es würde nur das erste Vorkommen von "&" löschen.

Delphi-Quellcode:
StringReplace(s, '&', '', [rfReplaceAll]);
ReplaceStr(s, '&', '');
s.Replace('&', '')

himitsu 27. Jun 2022 12:44

AW: & ersetzen, wenn es nicht als && vorkommt
 
[deleted]

Uwe Raabe 27. Jun 2022 13:33

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von DeddyH (Beitrag 1507920)
Nein, es würde nur das erste Vorkommen von "&" löschen.

Schon, aber das wäre bei einem String "List && Label &Designer" nicht wirklich hilfreich.

DeddyH 27. Jun 2022 13:58

AW: & ersetzen, wenn es nicht als && vorkommt
 
Das war ja nicht mein Code.

himitsu 27. Jun 2022 13:59

AW: & ersetzen, wenn es nicht als && vorkommt
 
Delphi-Quellcode:
s := ReplaceStr(ReplaceStr(ReplaceStr(s, '&&', #1), '&', ''), #1, '&')
:freak:
Delphi-Quellcode:
s := s.Replace('&&', #1).Replace('&', '').Replace(#1, '&')

oder Regexen

Sinspin 27. Jun 2022 14:32

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von DeddyH (Beitrag 1507920)
Nein, es würde nur das erste Vorkommen von "&" löschen.

Jup, du hast recht. :wall:

Zitat:

Zitat von himitsu (Beitrag 1507943)
Delphi-Quellcode:
s := s.Replace('&&', #1).Replace('&', '').Replace(#1, '&')

Das ist schon richtig gut :thumb:, aber die doppelten sollten ja erhalten bleiben.
also :
Delphi-Quellcode:
s := s.Replace('&&', #1).Replace('&', '').Replace(#1, '&&')
.

Beachten, #1 ist kein String!
Sondern ASCII Nummer 1. Also unwahrscheinlich dass das jemand aus versehen eingetippt hat.

Uwe Raabe 27. Jun 2022 15:05

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von Sinspin (Beitrag 1507953)
aber die doppelten sollten ja erhalten bleiben.

Ich nehme an, die sollen wohl eher durch einfache ersetzt werden, damit man dann den tatsächlich angezeigten String bekommt.

TurboMagic 27. Jun 2022 15:30

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1507959)
Zitat:

Zitat von Sinspin (Beitrag 1507953)
aber die doppelten sollten ja erhalten bleiben.

Ich nehme an, die sollen wohl eher durch einfache ersetzt werden, damit man dann den tatsächlich angezeigten String bekommt.

Deine Annahme stimmt!
Ich habe das mit einer leicht modifizierten Variante der VCL Funktion gelöst, ihr könnt euch also um wichtigere Probleme kümmwern... ;-)

Sinspin 27. Jun 2022 15:35

AW: & ersetzen, wenn es nicht als && vorkommt
 
Nur wenn Du die durch einfaches "&" ersetzt werden dir beim anzeigen via VCL Komponenten diese wieder durch Unterstrich oder unterstrichenen Buchstaben ersetzt und kein & angezeigt. && wird ja verwendet um ein einzelnes & in den Text zu bekommen ohne das es sich in einen Shortcut verwandelt.

himitsu 27. Jun 2022 16:01

AW: & ersetzen, wenn es nicht als && vorkommt
 
Nicht, wenn du im TLabel das ShowAccelChar auf True setzt. :stupid:

Aber ja, wie/wo es dann benutzt wird, entscheidet, ob man es als & oder && benötigt.

Rollo62 28. Jun 2022 06:24

AW: & ersetzen, wenn es nicht als && vorkommt
 
Zitat:

Zitat von Sinspin (Beitrag 1507953)
Delphi-Quellcode:
s := s.Replace('&&', #1).Replace('&', '').Replace(#1, '&&')
.

Ja das ist ein schöner Trick, läuft aber auch 3x durch den String und kopiert hin und her.
Ich würde das ähnlich wie Uwe mit einer einfachen Schleife machen wenn es um DB und Performance geht.

himitsu 28. Jun 2022 10:40

AW: & ersetzen, wenn es nicht als && vorkommt
 
Es kommt halt immer drauf an.

Wird das 1000 Mal die Sekunde gemacht, dann gäbe es da schon Optimierungspotential, aber sonst ... warum einfach, wenn's auch kompliziert geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 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