Войти

Показать полную графическую версию : [решено] Открытие папки с помощью кнопки


NickDang
07-01-2012, 19:38
Как открыть папку с помощью кнопки buton1 например. Папка находиться C:\Documents and Settings\Admin\Рабочий стол\Новая папка.

ferget
07-01-2012, 20:41
что значит "открыть папку"

Beyound
07-01-2012, 21:11
ээххххх (http://www.autopark.ru/ASBProgrammerGuide/WSHEXEC.HTM)

NickDang
07-01-2012, 21:27
Тоесть при нажатии кнопки выскакивало окно windows explorer а с направлением C:\Documents and Settings\Admin\Рабочий стол\Новая папка

opel431
08-01-2012, 02:27
А чем функция SelectDirectory не устраивает?

Beyound
08-01-2012, 07:49
SelectDirectory эт диалоговое окно если верить описанию. Шел же "по нажатию на кнопку откроет в эксплорере папку которую ему задаст программист т.е. его C:\Documents and Settings\Admin\Рабочий стол\Новая папка"

NickDang
08-01-2012, 11:45
Beyound, Можете написать, как правильно вводить где и что?

LilLoco
08-01-2012, 12:35
NickDang, так :

procedure TForm1.btn1Click(Sender: TObject);
begin
ShellExecute(Self.Handle,'explore','C:\Documents and Settings\Admin\Рабочий стол\Новая папка',nil,nil,SW_SHOWNORMAL);
end;

в uses добавить
ShellApi

Drongo
08-01-2012, 15:19
А если у меня система не на С:, учётка не Admin, система не локазирована на русский и Vista или Windows7 ?

Жёсткая привязка в данном случае - не правильный подход.

Любезный
08-01-2012, 16:52
ИМХО, каков вопрос - таков ответ.

А то, что задано постом выше - это уже второй вопрос. Хотя сказано правильно.

NickDang
08-01-2012, 17:27
LilLoco, Спасибо! то что надо)
---
Любезный, извини, в delphi я новичок )

Drongo
08-01-2012, 17:55
Но это не правильно в любом случае, уж лучше тогда определять программно учётку пользователя и\или рабочий стол. Для скриптов AVZ писали определение рабочего стола через реестр, код нашёл в инете, принцип такой же. При запуске читаем ветку реестра
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Foldersключ Desktop. Получаете истинное значение ключа, сохраняете его в переменную и используете как угодно
...
...
uses Registry;
...
function GetDesktopDir:String;
var reg:TRegistry;
begin
Result:='';
reg:=TRegistry.Create(KEY_READ);
try
reg.RootKey:=HKEY_CURRENT_USER;
if reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False) then
Result:=reg.ReadString('Desktop');
reg.CloseKey;
finally
reg.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(GetDesktopDir);
end;
...
Ещё нашёл такой, но с делфи знаком поверхностно, так что если что - не обессудьте. :)

uses
SHFolder;
var
path: array [0 .. MAX_PATH] of char;
begin
SUCCEEDED(SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, 0, @path[0]));
end;

P.S. Проверяйте перед открытием наличие папки "Новая папка", иначе если её не будет...

Любезный
08-01-2012, 23:59
При запуске читаем ветку реестра »

Ээээ! Так делать не надо.
http://www.transl-gunsmoker.ru/2008/12/shell-folders.html

Drongo
09-01-2012, 00:57
Любезный, Да-да-да, вспомнил, читал когда-то, спасибо за напоминание. :yes: В любом случае узнавать местоположение учётки, программно проще и надёжнее чем жёстко прописывать путь без проверки даже существования папки.

Beyound
09-01-2012, 15:11
Drongo, эм. вот так как ты советуешь делать точно ненадо. надо решать поставленную задачу а не придумывать себе работу. я согласен с тобой что "а если не локализована, а если все перемещено и т.д." но такой задачи нет. а то так можно начать - а если все в досе, а если надо рисовать свое окно а не експлорера, а если винда 95 и все вообще плохо.

Iska
09-01-2012, 15:53
Beyound, надо сразу учиться делать правильно, чтобы не было потом мучительно больно.

Drongo
09-01-2012, 17:55
надо решать поставленную задачу а не придумывать себе работу »Из-за таких криворуких программистов, потом у юзеров головная боль и плевки в монитор с упоминанием разработчика приложения. :biggrin:

P.S. Я своё мнение высказал, дальше как хотите, лень-матушка или ограниченность ума позволяет делать так как хочеЦЦа.




© OSzone.net 2001-2012