Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Suche Unicode ersatz für AnsiSameText? (https://www.delphipraxis.net/153482-suche-unicode-ersatz-fuer-ansisametext.html)

OrNEC 4. Aug 2010 17:39


Suche Unicode ersatz für AnsiSameText?
 
Suche seit einer Stunde nach einer Lösung um AnsiSameText durch was Unicode-fähiges zu ersetzen, kennst vllt jemand eine Lösung?

Delphi-Quellcode:
AnsiSameText(Trim(ExtractFileExt(Buffer)), '.txt')

sx2008 4. Aug 2010 17:49

AW: Suche Unicode ersatz für AnsiSameText?
 
Du hast die Lösung doch schon gefunden - AnsiSameText.
Deinen Dateinamen können chinesisch, türkisch oder was auch immer sein,
aber die Endung muss ".TXT", ".Txt" oder ".txt" lauten.
Also ist AnsiSameText hier vollkommen ausreichend.

mkinzler 4. Aug 2010 17:56

AW: Suche Unicode ersatz für AnsiSameText?
 
Ab D2009 ist AnsiSameText() eine Unicodefunktion (auch wenn der namen etwas anderes suggeriert) in D7 aber nicht.

Garfield 4. Aug 2010 19:48

AW: Suche Unicode ersatz für AnsiSameText?
 
Zitat:

Zitat von OrNEC (Beitrag 1039589)
... AnsiSameText ...

Sollte doch eigentlich nicht schwer sein:
Zitat:

Zitat von unit SysUtils;
function AnsiSameText(const S1, S2: string): Boolean;
function WideSameText(const S1, S2: WideString): Boolean;

function Trim(const S: string): string;
function Trim(const S: WideString): WideString;

function ExtractFileExt(const FileName: string): string;

Nur für ExtractFileExt musst Du Dir etwas überlegen.

OrNEC 4. Aug 2010 19:58

AW: Suche Unicode ersatz für AnsiSameText?
 
Also es geht um eine Drag & Drop Funktion. Vllt poste ich den danzen Code.
Ich kann die .crp* Datei nicht laden wenn sie kyrillischen Namen hat. Weiß jetzt nicht genau woran es liegt.

Delphi-Quellcode:
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var j, zaehler: Cardinal;
    Buffer, Extension: String;
    i: Integer;
    List, List2 : TTntStringList;
begin
  inherited;
  Buffer := '';
  zaehler := DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
  for j := 0 to zaehler - 1 do
    begin
      SetLength(Buffer, DragQueryFile(Msg.WParam, j, nil, 0) + 1);
      DragQueryFile(Msg.WParam, j, @Buffer[1], Length(Buffer));
      Extension := ExtractFileExt(Buffer);
    end;
  DragFinish(Msg.WParam);

//Laden
wideshowmessage(ExtractFileExt(Buffer));

if WideSameText(Trim(ExtractFileExt(Buffer)), '.crpu') or WideSameText(Trim(ExtractFileExt(Buffer)), '.crp') or WideSameText(Trim(ExtractFileExt(Buffer)), '.ccr') then
begin
List:=TTntStringList.Create;
  try
    List.LoadFromFile(Buffer);

    if ListBox1.Count<>0 then
    begin
    if WideMessageDlg(_('Retain existing stations list?'), mtConfirmation, [mbYes, mbNo], 0) = mrNo then
    begin
    ListBox1.Clear;
    ListBox2.Clear;
    ListBox3.Clear;
    ListBox4.Clear;
    end;
    end;

    if WideSameText(Trim(ExtractFileExt(Buffer)), '.crpu') or WideSameText(Trim(ExtractFileExt(Buffer)), '.crp') then
    begin
    for i:=0 to List.Count-1 do
    begin
    List2:=Explode('<>', List[i]);
    ListBox1.Items.Insert(i, List2[1]);
    ListBox2.Items.Insert(i, List2[2]);
    ListBox3.Items.Insert(i, List2[3]);
    ListBox4.Items.Insert(i, List2[4]);
    List2.Free;
    end;
    end else
        begin
        for i:=0 to List.Count-1 do
        begin
        List2:=Explode('=', List[i]);
        ListBox1.Items.Insert(i, List2[1]);
        ListBox2.Items.Insert(i, List2[2]);
        ListBox3.Items.Insert(i, List2[3]);
        ListBox4.Items.Insert(i, List2[4]);
        List2.Free;
        end;
        end;

  finally
    List.Free;
  end;
end;
end;

himitsu 4. Aug 2010 20:18

AW: Suche Unicode ersatz für AnsiSameText?
 
Zitat:

Zitat von Garfield (Beitrag 1039608)
Nur für ExtractFileExt musst Du Dir etwas überlegen.

ExtractFileExt sucht nach dem letzten Punkt und der Punkt existiert in Ansi und Unicode ... ist also ebenso kein Problem.
(höchstens Unicodezeichen in der Dateiendung würden in ? umgewandelt, aber das sollte ja soweit auch kein Problem sein, wenn man eh auf Dateiendungen mit ANSI-Zeichen prüft)

OrNEC 4. Aug 2010 20:20

AW: Suche Unicode ersatz für AnsiSameText?
 
Genau, hab das jetzt auch soweit verstanden. :)

Wo hackt es dann eurer Meinung nach da im Code? :?

Garfield 4. Aug 2010 20:23

AW: Suche Unicode ersatz für AnsiSameText?
 
Vielleicht solltest Du da auch Widefunktionen verwenden. Ich habe das mal so gemacht:

Delphi-Quellcode:
procedure T***.WMDROPFILES(var Msg: TMessage);
var
  pDragFile : PWideChar;
  iFileCount : integer;
  i, iSize  : integer;
  slDropList : TStringList;
begin
  {
  *  Initialisierung.
  }
  pDragFile := nil;
  slDropList := TStringList.Create;
  {
  *  Anzahl der Dropfiles holen.
  }
  iFileCount := DragQueryFileW(Msg.wParam, $FFFFFFFF, pDragFile, 255);
  {
  *  Wenn Einträge existieren, Liste abarbeiten.
  }
  if iFileCount > 0 then
  for i := 0 to iFileCount - 1 do
  begin
    {
    *  Die Länge des Eintrages ermitteln.
    }
    iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;
    {
    *  Den speicher für den String bereitstellen.
    }
    pDragFile := WideStrAlloc(iSize);
    {
    *  Den Eintrag holen.
    }
    DragQueryFileW(Msg.wParam, i, pDragFile, iSize);
    {
    *  Den Eintrag in die Liste eintragen.
    }
    slDropList.Add(pDragFile);
    {
    *  Den reservierten Speicher freigeben.
    }
    WideStrDispose(pDragFile);
  end;
  {
  *  Messagebehandlung beenden.
  }
  DragFinish(Msg.wParam);

...
end;
slDropList müsste vermutlich TWideStringList sein. Ist es hier nicht, weil ich den TNT Hack von Himitsu verwende.

Für das ExtractFileExt könnte man auch eine Kopierfunktion verwenden.

Garfield 5. Aug 2010 17:37

AW: Suche Unicode ersatz für AnsiSameText?
 
Zitat:

Zitat von Garfield (Beitrag 1039627)
Delphi-Quellcode:
    iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;

Ich wurde freundlicherweise darauf hingeweisen, dass es richtig so wäre:

Delphi-Quellcode:
    iSize := DragQueryFileW(Msg.wParam, i, nil, 0) + 1;


Vielen Dank.

sx2008 15. Aug 2010 20:19

AW: Suche Unicode ersatz für AnsiSameText?
 
Dieser Code tut meinen Augen weh:
Delphi-Quellcode:
wideshowmessage(ExtractFileExt(Buffer));

if WideSameText(Trim(ExtractFileExt(Buffer)), '.crpu') or WideSameText(Trim(ExtractFileExt(Buffer)), '.crp') or WideSameText(Trim(ExtractFileExt(Buffer)), '.ccr') then
Vielleicht sollte man hier eine Zwischenvariable verwenden!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:57 Uhr.
Seite 1 von 2  1 2      

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