AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Strin an ShortString zuweisen, wie?

Strin an ShortString zuweisen, wie?

Ein Thema von DualCoreCpu · begonnen am 6. Nov 2019 · letzter Beitrag vom 7. Nov 2019
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#1

AW: Strin an ShortString zuweisen, wie?

  Alt 6. Nov 2019, 22:05
Du unterliegst einem Irrtum: Ein array[0..31] of Ansichar ist kein ShortString! Einen vergleichbaren ShortString würde man mit string[31] deklarieren.

Kurze String-Typen
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
695 Beiträge
 
Delphi 12 Athens
 
#2

AW: Strin an ShortString zuweisen, wie?

  Alt 6. Nov 2019, 22:30
Du unterliegst einem Irrtum: Ein array[0..31] of Ansichar ist kein ShortString! Einen vergleichbaren ShortString würde man mit string[31] deklarieren.
Hätte mir auch auffallen sollen, dies stammt ja aus der "C"-Ecke
Roland
  Mit Zitat antworten Zitat
cpux86

Registriert seit: 24. Jun 2008
7 Beiträge
 
#3

AW: Strin an ShortString zuweisen, wie?

  Alt 7. Nov 2019, 06:03
Warum aber funktioniert dann die Abfrage

Delphi-Quellcode:
if FCommand.MenuName = 'Mein Tool'
******then FCommand.OptionsDialog := TCommandOptOptDlg.Create(self)
nicht?

Zitat von blawen:
Delphi-Quellcode:
Dies müsste vom Prinzip m.E. eigentlich funktionieren, zumindest solange der der zugewiesene String nicht zu lange ist.
FCommand.ProgName := FIniFile.ReadString('Command','Exename',''); //Das funktioniert nicht so einfach, aber wie dann?
Tut es aber leider nicht. Der String enthält bei Progname nur den Namen der .exe Datei, der ist auf keinen Fall zu lang, bei den üblichen .exe Dateinamen. Der Menuname hat maximal 31 Zeichen, weil längere Strings da sinnlos sind.


Ist eventuell das hier die Ursache:

FMenuname ist immerhin ein AnsiString Array.
Delphi-Quellcode:
procedure TRegisteredCommand.SetMenuName(const Value: ShortString);
var i: Integer; s: ShortString;
begin
  for i := 1 to Length(Value) do FMenuName[i-1] := Value[i];

end;

function TRegisteredCommand.GetMenuName: ShortString;
var i: Integer; s: ShortString;
begin
  s := '';
  i := 0;
  while (FMenuName[i] >= ' ') do
  begin
    s := s + FMenuName[i];
    inc(i);
  end;

  Result := s;
end;
[OT]
Sorry für den Doppelaccount, bin schöni, kann mich aber schon lange nicht mehr als Schöni einloggen. Wollte das gestern ändern und zukünftig wieder als schöni hier aktiv sein statt DualCoreCpu, dabei gibt mir die DP auf "Kennwort vergessen" aber den Usernamen cpux86. Da kann ich auch bei DualCoreCpu bleiben oder eben dem jetzigen Usernamen.
[/OT]

Geändert von cpux86 ( 7. Nov 2019 um 06:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Strin an ShortString zuweisen, wie?

  Alt 7. Nov 2019, 06:56
if FCommand.MenuName[index] = 'Mein Toolthen
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
229 Beiträge
 
#5

AW: Strin an ShortString zuweisen, wie?

  Alt 7. Nov 2019, 07:15
Hi,

"if ShortString = String then" sollte gehen, notfalls hart casten
also "if (String(FCommand.MenuName) = 'Mein Tool') then", aber
Delphi-Quellcode:
function TRegisteredCommand.GetMenuName: ShortString;
var i: Integer; s: ShortString;
begin
  s := '';
  i := 0;
  while (FMenuName[i] >= ' ') do
  begin
    s := s + FMenuName[i];
    inc(i);
  end;

  Result := s;
end;
ist mir etwas zu gefährlich ... dann lieber:
Delphi-Quellcode:
function TRegisteredCommand.GetMenuName: ShortString;
var i: Integer;
begin
  Result := '';
  for i := Low(FMenuName= to High(FMenuName) do
  begin
    if (FMenuName[i] < ' ') then Break;
    Result := Result + FMenuName[i];
  end;
end;
Die zusätzliche Variable "s" hab ich auch mal rausgenommen.
Aber mir geht es eigendlich darum, dass das Array evtl. nicht initialisiert ist,
und dementsprechend er lustig über den Tellerrand laufen könnte ... glaube ich ... theoretisch ... unter Umständen ... Aber vielleicht ist das schon das ganze Problem.

LG
Incocnito
  Mit Zitat antworten Zitat
cpux86

Registriert seit: 24. Jun 2008
7 Beiträge
 
#6

AW: Strin an ShortString zuweisen, wie?

  Alt 7. Nov 2019, 07:30
if FCommand.MenuName[index] = 'Mein Toolthen
Nein, sorry, FMenuName ist ein AnsiChar Array!

Zitat von Incocnito:
Aber mir geht es eigendlich darum, dass das Array evtl. nicht initialisiert ist,
und dementsprechend er lustig über den Tellerrand laufen könnte ... glaube ich ... theoretisch ... unter Umständen ... Aber vielleicht ist das schon das ganze Problem.
Nein, das ist es nicht, ich habe diese Felder mittels FillChar(FMenuName, Sizeof(FMenuName),$00) mit Nullbytes initialisiert.

Eher ist es was in dieser Richtung:

Delphi-Quellcode:
//von der Embarcadero Webseite (Doku zu Strings):
function ShortStringToString(Value: array of Byte): String;
var
  B: TBytes;
  L: Byte;
begin
  Result := '';
  L := Value[0];
  SetLength(B, L);
  Move(Value[1], B[0], L);
  Result := TEncoding.Ansi.GetString(B);
end;
Ich habe das TEncoding.Ansi.GetString() nicht drin.

Mein Array FMenuName ist AnsiChar. Von da will ich auf ShortString zuweisen.

Geändert von cpux86 ( 7. Nov 2019 um 07:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz