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/)
-   -   Delphi Ordner erstellen international korrekt (https://www.delphipraxis.net/30918-ordner-erstellen-international-korrekt.html)

sieppl 1. Okt 2004 00:30


Ordner erstellen international korrekt
 
Hallo,

mein ShellTreeView soll per KontextMenü Ordner erstellen können.
Das ganze soll international in der richtigen Sprache geschehen.
Also nicht á la Pfad + 'Neuer Ordner'.

Gibt es einen kanonischen Befehl für das IContextMenü?
(wie z.B. cut, copy, paste)

Falls nein, wo und wie kann ich die Bezeichnung für 'Neuer Ordner'
auslesen? Irgendwo wird Windows, dass ja auch machen..

Oder gibt es den supercoolen Befehl, der die Windows-Funktion
Ordner erstellen aufruft und dabei automatisch auf die Namensvergabe
achtet??

Grüße

Sebastian

sieppl 1. Okt 2004 17:24

Re: Ordner erstellen international korrekt
 
Kann es sein, dass ich der Erste bin, der vor dem Problem steht?
Hat denn noch nie jemand auf irgendwelche Windows-Variablen zurückgegriffen um User-Menüs zu bauen?
Ich kann den Namen 'Neuer Ordner' leider nicht als ressourceString deklarieren, da er in einer Komponente benutzt wird.
Keine Ideen???

Remote1 1. Okt 2004 17:42

Re: Ordner erstellen international korrekt
 
ja frag doch die system sprache ab und ändere entsprechend deine bezeichnungen
viele andere programme haben dazu auch entsprechende language dateien mit beiliegen
mach also im einfachsten fall ne ini wo du alle bezeichnungen in den entsprechenden sprache drin hast und lade dann die bezeichner

systemsprache abfragen:
Delphi-Quellcode:
function TForm1.GetOSLanguage: string;
var
  LanguageID : LangID;
  Language: array [0..100] of char;
begin
  LanguageID:=GetSystemDefaultLangID;
  VerLanguageName(LanguageID,Language,100);
  Result := String(Language);
end;
nachtrag:
neue posts erst nach 24-48h :zwinker:
(nicht bös gemeint)

sieppl 1. Okt 2004 19:11

Re: Ordner erstellen international korrekt
 
mmh, die idee hatte ich auch schon. einen localizer setze ich sowieso ein.
wie gesagt soll das eine komponente werden, die autark funktioniert.
und so eine lösung wäre nicht gerade elegant.
vielleicht kommt ja noch was.. :)

Grüße

Sebastian

himitsu 2. Okt 2004 02:43

Re: Ordner erstellen international korrekt
 
ich hab mal suchen lassen und "neuer Ordner" taucht mehrmals als Resource in irgendwelchen Dateien auf, aber leider nicht in der Regitry ... dass wäre ja das einfachste gewesen -.-

Aber ich vermute mal diese
F:\Programme\Gemeinsame Dateien\Microsoft Shared\Web Folders\MSOWS407.DLL
ist die vielversprechenste Datei, wo du dir das rausholen könntest.
Brauchst ja nur Anhand der aktuellen LanguageID dir die passende Datei in diesem Verzeichnis raussuchen und wenn's keine gibt (z.B. Win98), dann gehst du einfach auf die Sprachdatei vom Windwos
WINDOWS\SYSTEM\SHELL32.DLL
los (welche aber nicht immer mit der aktuellen Sprache übereinstimmen muß)

Ich vermute aber auch noch, das es bestimmt 'nen netten API-Befehl gibt, wo man bestimmtAnhand 'ner ID den gewünschten Sting bekommt.


Hier mal die alle möglichen Dateien XP:
Programme\Gemeinsame Dateien\Microsoft Shared\Web Folders\MSOWS407.DLL
Programme\MSN\MSNCoreFiles\mail.mar
Programme\MSN\MSNCoreFiles\ui.mar
Programme\Outlook Express\msoeres.dll
Programme\Windows NT\dialer.exe
Windows\PCHEALTH\HELPCTR\Indices\merged.hhk
Windows\Prefetch\WEB-INSTALL.EXE-05FBC1E6.pf
Windows\system32\appwiz.cpl
Windows\system32\avtapi.dll
Windows\system32\browselc.dll
Windows\system32\capesnpn.dll
Windows\system32\cdosys.dll
Windows\system32\config\system
Windows\system32\dllcache\appwiz.cpl
Windows\system32\dllcache\avtapi.dll
Windows\system32\dllcache\browselc.dll
Windows\system32\dllcache\capesnpn.dll
Windows\system32\dllcache\cdosys.dll
Windows\system32\dllcache\dialer.exe
Windows\system32\dllcache\dmdskres.dll
Windows\system32\dllcache\ieakui.dll
Windows\system32\dmdskres.dll
Windows\system32\ieakui.dll
Windows\system32\mmc.exe
Windows\system32\mmcbase.dll
Windows\system32\msieftp.dll
Windows\system32\mydocs.dll
Windows\system32\shdoclc.dll
Windows\system32\shell32.dll
Windows\system32\wmploc.dll

hier für 2K:
Programme\Gemeinsame Dateien\Microsoft Shared\Web Folders\MSOWS407.DLL
Programme\Outlook Express\msoeres.dll
Programme\Windows NT\dialer.exe
WINNT\system32\appwiz.cpl
WINNT\system32\avtapi.dll
WINNT\system32\browselc.dll
WINNT\system32\capesnpn.dll
WINNT\system32\dllcache\avtapi.dll
WINNT\system32\dllcache\browselc.dll
WINNT\system32\dllcache\capesnpn.dll
WINNT\system32\dllcache\dialer.exe
WINNT\system32\dllcache\dmdskres.dll
WINNT\system32\dllcache\ieakui.dll
WINNT\system32\dllcache\mmc.exe
WINNT\system32\dllcache\mmcndmgr.dll
WINNT\system32\dllcache\msieftp.dll
WINNT\system32\dllcache\msoeres.dll
WINNT\system32\dllcache\shdoclc.dll
WINNT\system32\dllcache\shell32.dll
WINNT\system32\dmdskres.dll
WINNT\system32\ieakui.dll
WINNT\system32\mmc.exe
WINNT\system32\mmcndmgr.dll
WINNT\system32\msieftp.dll
WINNT\system32\shdoclc.dll
WINNT\system32\shell32.dll

und 98:
WINDOWS\SYSTEM\APPWIZ.CPL
WINDOWS\SYSTEM\SHDOCVW.DLL
WINDOWS\SYSTEM\SHELL32.DLL

jfheins 2. Okt 2004 07:48

Re: Ordner erstellen international korrekt
 
Zwei davon sind aber unsinnig !
[Edit]Naja, die dialer.exe nicht ganz (dachte, das wär'n dialer 8) )aber die Prefetch auf jeden Fall
Neue Liste:
Programme\Gemeinsame Dateien\Microsoft Shared\Web Folders\MSOWS407.DLL
Programme\MSN\MSNCoreFiles\mail.mar
Programme\MSN\MSNCoreFiles\ui.mar
Programme\Outlook Express\msoeres.dll
Programme\Windows NT\dialer.exe
Windows\PCHEALTH\HELPCTR\Indices\merged.hhk
Windows\Prefetch\WEB-INSTALL.EXE-05FBC1E6.pf
Windows\system32\appwiz.cpl
Windows\system32\avtapi.dll
Windows\system32\browselc.dll
Windows\system32\capesnpn.dll
Windows\system32\cdosys.dll
Windows\system32\config\system
Windows\system32\dllcache\appwiz.cpl
Windows\system32\dllcache\avtapi.dll
Windows\system32\dllcache\browselc.dll
Windows\system32\dllcache\capesnpn.dll
Windows\system32\dllcache\cdosys.dll
Windows\system32\dllcache\dialer.exe
Windows\system32\dllcache\dmdskres.dll
Windows\system32\dllcache\ieakui.dll
Windows\system32\dmdskres.dll
Windows\system32\ieakui.dll
Windows\system32\mmc.exe
Windows\system32\mmcbase.dll
Windows\system32\msieftp.dll
Windows\system32\mydocs.dll
Windows\system32\shdoclc.dll
Windows\system32\shell32.dll
Windows\system32\wmploc.dll

Alienhere 2. Okt 2004 08:39

Re: Ordner erstellen international korrekt
 
Wurde schon mal die Unit ShlObj oder ShellAPI angedacht?

Da steht der String garantiert auch nicht drin :shock:

Aber eine der beiden Units erzeugt M.M. den "Neuen Ordner" in der Landessprache.

mfg

sieppl 2. Okt 2004 12:13

Re: Ordner erstellen international korrekt
 
das mit den dll würde bestimmt zum erfolg führen, aber warum kompliziert machen wenn es auch einfacher geht? :) Vor allem weiß man nie, ob die DLLs nicht verändert wurden und dann noch verschiedende orte und versionen auf den plattformen.
schaut euch mal bitte MSDN-Library durchsuchenCMINVOKECOMMANDINFOEX an. dort gibt es ein CMDSTR_NEWFOLDER.
Habt ihr das schon benutzt? Lese ich richtig, dass CMDSTR_NEWFOLDER eine Befehls-Konstante ist, die eigentlich genau mein Ziel erreichen müsste?

Grüße

Sebastian

[Nachschlag:]

hier ist wohl das, was ich suche:
Google Groups

Die Sache ist die, dass man um Neu -> Neuer Ordner aufzurufen auch das Kontext-Menü des Hintergrunds benötigt. Das geht über IShellView.GetItemObject usw. Das wird ein hartes Stück Arbeit. Vor allem das ganze in Delphi hinzubekommen. Wenn es dann auf Win9x bis XP läuft wird erstmal gefeiert. :drunken:

Grüße

Sebastian


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