![]() |
array of char UpperCase
Delphi-Quellcode:
Möchte das ergebnis als UpperCase ausgeben wie konvertieren ?
zTmp : array[0..255] of char;
Delphi-Quellcode:
Array und string
zTmp := UpperCase(zTmp);
gruss Emil |
Re: array of char UpperCase
Hallo EWeis,
zTmp als String definieren. |
Re: array of char UpperCase
Zitat:
Nö geht auch nicht dann hab ich noch mehr Fehler Dann kommt Meldung! Zitat:
gruss Emil |
Re: array of char UpperCase
:?: Zeig mal den Code.
|
Re: array of char UpperCase
Delphi-Quellcode:
:?: ^^
var
i: Integer; begin for i := 0 to high(zTmp) do begin zTmp[i] := UpperCase(zTmp[i])[1]; end; end; |
Re: array of char UpperCase
Zitat:
Delphi-Quellcode:
zTmp : array[0..255] of char;
Delphi-Quellcode:
EDIT:
function AddResource(sResource : PAnsiChar): Integer;
var UseStyle, hMain, nIndex , nCount: Integer; hImage : Cardinal; begin nCount := 0; GetShortPathName(sResource, @zTmp, SIZEOF(zTmp)); zTmp := UpperCase(zTmp); // <<< will nicht hMain := wMainWindow(0); Jetzt habe ich dadurch wieder ein anderes problem .. grrrr
Delphi-Quellcode:
zTmp := PChar(sResource + RightStr('0000' + LTrim(IntToStr(nCount)), 4));
Zitat:
gruss Emil |
Re: array of char UpperCase
Probier mal das:
Delphi-Quellcode:
[edit] length(zTmp)-1[/edit]
var
zTmp: string; begin SetLength(zTmp, 256); SetLength(zTmp, GetShortPathName(sResource, @zTmp[1], length(zTmp)-1)); zTmp := UpperCase(zTmp); end; |
Re: array of char UpperCase
Nur mal so:
Delphi-Quellcode:
Und ein Array in Großbuchstaben geht so (zugegeben: Besonders pervers)
Function Upcase(c : Char) : Char;
Delphi-Quellcode:
StrPCopy (PChar(@s),Uppercase(StrPas(PChar(@s))));
|
Re: array of char UpperCase
Zitat:
nochmal die ganze Funktion. Ich erstelle eine NonVCL ListBox
Delphi-Quellcode:
zTmp : array[0..255] of char;
zData : array[0..16] of char;
Delphi-Quellcode:
Mein problem sind die auskommentierten positionen
function AddResource(sResource : PAnsiChar): Integer;
var UseStyle, hMain, nIndex , nCount: Integer; hImage : Cardinal; i: Integer; begin nCount := 0; GetShortPathName(sResource, @zTmp, SIZEOF(zTmp)); for i := 0 to high(zTmp) do begin zTmp[i] := UpperCase(zTmp[i])[1]; end; hMain := wMainWindow(0); UseStyle := WS_CHILD or LBS_HASSTRINGS; hLISTFNAME := GetMainItem(ID_LISTFNAME); if hLISTFNAME = 0 then hLISTFNAME := CreateWindowEx(0, 'LISTBOX', nil, UseStyle, 0, 0, 0, 0, hMain, ID_LISTFNAME, GetInstance, nil); hLISTIMAGE := GetMainItem(ID_LISTIMAGE); if hLISTIMAGE = 0 then hLISTIMAGE := CreateWindowEx(0, 'LISTBOX', nil, UseStyle, 0, 0, 0, 0, hMain, ID_LISTIMAGE, GetInstance, nil); if hLISTFNAME <> 0 then begin nIndex := SendMessage(hLISTFNAME, LB_FINDSTRING, -1, integer(@zTmp)); if nIndex > -1 then // gleicher Eintrag gefunden begin SendMessage(hLISTIMAGE, LB_GETTEXT, nIndex, integer(@zData)); hImage := StrLen(zData); // lese den string ein SendMessage(hLISTFNAME, LB_GETTEXT, nIndex, integer(@zTmp)); // lösche den alten Eintrag bevor er aktualisiert wird SendMessage(hLISTFNAME, LB_DELETESTRING, nIndex, 0); SendMessage(hLISTIMAGE, LB_DELETESTRING, nIndex, 0); sResource := PChar(RightStr(string(zTmp), 5)); // zTmp := sResource + RightStr('0000' + LTrim(IntToStr(nCount)), 4); if SendMessage(hLISTFNAME, LB_ADDSTRING, 0, integer(@zTmp)) < 0 then hImage := 0 ; if SendMessage(hLISTIMAGE, LB_ADDSTRING, 0, integer(@zData)) < 0 then hImage := 0; end else begin // kein eintrag gefunden addieren hImage := GDI_CreateImageFromFile((sResource)); if hImage <> 0 then begin // zTmp := PChar(zTmp + '0001'); if SendMessage(hLISTFNAME, LB_ADDSTRING, 0, integer(@zTmp)) < 0 then GDI_DisposeImage(hImage); if hImage <> 0 then begin // zData := PChar(IntToStr(hImage)); if SendMessage(hLISTIMAGE, LB_ADDSTRING, 0, integer(@zTmp)) < 0 then hImage := 0; end; end; end; end; Result := hImage; end; welche ich wiedermal nicht richtig kovertieren kann.
Delphi-Quellcode:
gruss Emil
zTmp := sResource + RightStr('0000' + LTrim(IntToStr(nCount)), 4);
zTmp := PChar(zTmp + '0001'); zData := PChar(IntToStr(hImage)); |
Re: array of char UpperCase
Warum machst du es dir denn so kompliziert mit dem Array? Nimm einfach einen String und alles ist gut...
|
Re: array of char UpperCase
Zitat:
hab dann aber nocht nicht mein anderes Problem gelößt :cry:
Delphi-Quellcode:
zTmp := sResource + RightStr('0000' + LTrim(IntToStr(nCount)), 4);
zTmp := PChar(zTmp + '0001'); zData := PChar(IntToStr(hImage)); Zitat:
|
Re: array of char UpperCase
Zitat:
gruss Emil |
Re: array of char UpperCase
Zitat:
|
Re: array of char UpperCase
Zitat:
bekomme ich bei
Delphi-Quellcode:
nichts raus da ich hier einen Buffer benötige.
GetShortPathName(sResource, @zTmp, SIZEOF(zTmp));
gruss Emil |
Re: array of char UpperCase
Wenn zTmp ein String ist:
Delphi-Quellcode:
GetShortPathName(sResource, @zTmp[1], Length(zTmp));
|
Re: array of char UpperCase
Du hast ja auch nicht meinen Code benutzt. Bei mir steht @zTmp[1] (Zeiger auf erstes Zeichen) und Length(zTmp)-1. Und vergiss nicht, die Länge des Strings mit SetLength zuerst auf die richtige Länge zu setzen.
|
Re: array of char UpperCase
Zitat:
zTmp ist leer wenn ich einen string dafür verwende gruss Emil |
Re: array of char UpperCase
Delphi-Quellcode:
Gibt bei mir folgendes aus:
procedure Test(sResource: pChar);
var zTmp: string; begin SetLength(zTmp, 256); SetLength(zTmp, GetShortPathName(sResource, @zTmp[1], length(zTmp)-1)); zTmp := UpperCase(zTmp); showmessage(ztmp); end; procedure TForm1.FormCreate(Sender: TObject); begin Test('c:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2904.0\Microsoft.DirectX.Direct3DX.xml'); end;
Code:
---------------------------
Project1 --------------------------- C:\WINDOWS\MICROS~1.NET\DIRECT~1\102904~1.0\MICROS~1.XML --------------------------- OK --------------------------- |
Re: array of char UpperCase
Zitat:
Habe nicht ganz mitbekommen auf was du hinaus wolltest das funktioniert natürlich dann auch mit string und nimmt mir viel Arbeit ab so wie du schon sagtest. Hatte die länge nicht mit berücksichtigt. Danke schön ;) gruss Emil |
Re: array of char UpperCase
GetShortPathName gibt Dir übrigens die benötigte Länge zurück, wenn der Puffer zu klein ist.
Delphi-Quellcode:
SetLength(zTmp,GetShortPathName(sResource,nil,0));
GetShortPathName(sResource,@zTmp[1],Length(zTmp)); |
Re: array of char UpperCase
Man kann auch das Array in den Mülleimer verschieben und sich ein nettes PChar basteln.
Delphi-Quellcode:
function GetShortPathNameStr(longPath: string): string;
var szShortPathName: PChar; n: integer; begin Result := ''; GetMem(szShortPathName, MAX_PATH); try if GetShortPathName(PChar(longPath), szShortPathName, n) > 0 then Result = STRING(szShortPathName); finally FreeMem(szShortPathName); end; end; Ich habe feststellen müssen das solche Sachen wie @zTmp[1] bei manchen Compilern in Zeichenwirrwa auflösen. |
Re: array of char UpperCase
Zitat:
Die Windows.pas darf man ja mit einbinden oder nicht ? Vieleicht hast noch was um die Plattformen zu prüfen ? Dann kann ich die letzt SysUtils auch noch rausschmeißen ;)
Delphi-Quellcode:
Das stört jetzt noch
Result := (Win32MajorVersion >= 5) and (Win32Platform = VER_PLATFORM_WIN32_NT); // Win 2000 or up
gruss EMil |
Re: array of char UpperCase
Zitat:
Man spart sich die Konvertierungs-Arie. Klar kann man die Windows.pas, Messages.pas einbinden, warum auch nicht. Die Sysutils würde ich an deiner Stelle drin lassen oder du musst dir eine Eigene basteln um auf grundliegende Tolls zuzugreifen wie UpperCase, format, Fileexist, ChangeFileExt etc. Bei meiner Source vom Fisch ist eine kleine dabei.
Delphi-Quellcode:
Sowas ? ;)
function IsWin2kOrUp: Boolean;
var ovi: TOSVERSIONINFO; begin Result := FALSE; ZeroMemory(@ovi, sizeof(TOSVERSIONINFO)); ovi.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO); GetVersionEx(ovi); if (ovi.dwPlatformId = VER_PLATFORM_WIN32_NT) and (ovi.dwMajorVersion >= 5) then result := TRUE; end; |
Re: array of char UpperCase
Zitat:
Denke man sollte schon nonvcl bleiben ansonstem kann ich direkt ne Form addieren ;) JO sowas werd es mal testen. gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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