Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.08.2018, 11:58
Deligter5 Deligter5 вне форума
Прохожий
 
Регистрация: 26.07.2018
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Помогите сделать Програму

1. При нажатии на кнопку выскакивало меню выбора папки.
2. Когда мы выбрали допустим папку DATA , она тут же скопировалась вместе с вложенными
файлами в папку TEMP.
3. Также одновременно скопировались файлы по маске txt из папки DATA в папку Program\in
4. Запустить файл LongLatPicker.jar
5. Скопировать файлы по маске txt из папки Program\out в папку TEMP.

В итоге в дереве папки TEMP олжна быть папка DATA и уже обработан файл txt
Архив приложен к сообщению.
Всем спасибо заранее .
Вложения
Тип файла: 7z TEST.7z (15.1 Кбайт, 6 просмотров)
Ответить с цитированием
  #2  
Старый 01.08.2018, 16:29
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от Deligter5
...
4. Запустить файл LongLatPicker.jar
Не запустится, т.к. не является исполняемым файлом.

Если установить Java машину на комп, то можно попробовать.
Вот тема про это. Запуск JAR файлов

Последний раз редактировалось TEKTON, 01.08.2018 в 21:19.
Ответить с цитированием
  #3  
Старый 01.08.2018, 18:42
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Разбил по шагам, но можно соединить код в одну кнопку

Код:
...  {Add in uses  ShellApi, FileCtrl, SysUtils}
....
var
  Form1: TForm1;
  chosenDirectory : string;// Глобальная переменная с путём к выбранной папке

implementation

{$R *.dfm}
{------------------------ CopyDir ----------------------------}
 function CopyDir(const fromDir, toDir: string): Boolean;
var
  fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do
  begin
    wFunc  := FO_COPY;
    fFlags := FOF_FILESONLY;
    pFrom  := PChar(fromDir + #0);
    pTo    := PChar(toDir)
  end;
  Result := (0 = ShFileOperation(fos));
end;

{---------- 1. Выбор каталога и создание папок для работы--------------------}
procedure TForm1.Button1Click(Sender: TObject);
var
options : TSelectDirOpts;
Path:string;
begin
   chosenDirectory :=ExtractFileDir(ParamStr(0));  // Установка начального каталога
  // Просим пользователя выбрать используя полностью различные диалоги!
  if SelectDirectory(chosenDirectory, options, 0)then
  {ShowMessage('Выбранный каталог = = '+chosenDirectory)}
  else ShowMessage('Выбор прерван');
{З.Ы.  Выбор каталога не очень красивый.
Помню когда то на API попадался очень удобный и красивый,
но не найду сейчас его}


{Создаём папки для работы рядом с нашим exe}
CreateDir('TEMP');// Создаём папку TEMP
Path := ExtractFilePath(ParamStr(0)) + 'Program';// переменная с путём к папке Program
ForceDirectories(Path+'/in');// Создаём папку Program со вложенной папкой   in
ForceDirectories(Path+'/out'); // Создаём папку Program со вложенной папкой out
end;

{------------------------ 2. Копирование выбраной папки в TEMP ----------------------------}
procedure TForm1.Button2Click(Sender: TObject);
var
a,b:string;
begin
a:=chosenDirectory; // путь с выбранной папкой
b:=ExtractFileDir(ParamStr(0))+'/TEMP'; // Куда будем копировать
CopyDir(a,b); // Копируем из... в...
end;

{------------------------ 3. Копируем txt файлы из DATA в Program\in ----------------------------}
procedure TForm1.Button3Click(Sender: TObject);
begin
CopyFile(PWideChar(chosenDirectory+'\DATA\*.txt'), PWideChar(ExtractFileDir(ParamStr(0))+'Program\in\*.txt'), false);
end;

{4. Как запустить *.jar ХЗ
Если б был *.Exe, *.Com, *.txt...
ТО как то так

 WinExec(Pchar('calc.exe'), SW_SHOWNORMAL);

// SW_HIDE — окно скрыто,
// SW_ShowMaximized — окно максимально развернуто,
//  SW_ShowMinimized — окно свернуто,
//  SW_ShowNormal — вид окна обычный.

Или 

ShellExecute(0,'Open',PChar(путь к файлу),'',nil,1);
}


{------------------------ 5. Копируем txt файлы из Program\out в TEMP ----------------------------}
procedure TForm1.Button5Click(Sender: TObject);
begin
DeleteFile(ExtractFileDir(ParamStr(0))+'/TEMP/*.txt');//Чистим на всякий случай папку TEMP от файлов, что б избежать диалогов о замене
CopyFile(PWideChar(ExtractFileDir(ParamStr(0))+'Program\out\*.txt'),PWideChar(ExtractFileDir(ParamStr(0))+ExtractFileDir(ParamStr(0))+'/TEMP/*.txt'), false);
end;
end.

Последний раз редактировалось TEKTON, 01.08.2018 в 21:50.
Ответить с цитированием
  #4  
Старый 01.08.2018, 19:24
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Можно такой диалог выбора папки сделать

Код:
{Add in uses  ShlObj}

var
  Form1: TForm1;
  TempPath:array[0..MAX_PATH] of char; //Путь к выбранной папке

implementation

{$R *.dfm}

//Handle - Ссылка на родительское окно
function BrowseDialog(const Handle:Cardinal):string;
var
  lpItemID:PItemIDList;
  BrowseInfo:TBrowseInfo;
  DisplayName:array[0..MAX_PATH] of char;

begin
  Result:='';
  FillChar(BrowseInfo,sizeof(TBrowseInfo),#0);
  with BrowseInfo do
    begin
      hwndOwner:=Handle;
      pszDisplayName:=@DisplayName;
      lpszTitle:='Выбрать папку';
      ulFlags:=BIF_RETURNONLYFSDIRS;
    end;
  lpItemID:=SHBrowseForFolder(BrowseInfo);
  If lpItemId<>nil then
    begin
      SHGetPathFromIDList(lpItemID,TempPath);
      Result:=TempPath;
      GlobalFreePtr(lpItemID);
    end;
end;


procedure TForm1.Button1Click(Sender: TObject);

begin

 BrowseDialog(Handle);
 ShowMessage(TempPath); // В TempPath будет путь к выбранной папке

end;

end.

Последний раз редактировалось TEKTON, 01.08.2018 в 21:44.
Ответить с цитированием
  #5  
Старый 02.08.2018, 14:51
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Выбор папки:

Код:
uses FileCtrl;
const
  SELDIRHELP = 1000;

procedure TForm1.Button1Click(Sender: TObject);
var
  Dir: string;
begin
  Dir := 'C:\Windows';
  if FileCtrl.SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then
    Label1.Caption := Dir;
end;

Копирование и создание папки:

Код:
uses
  IOUtils;

procedure TForm1.btnCopyClick(Sender: TObject);
begin
  try
    { Copy directory from source path to destination path }
    TDirectory.Copy(edSourcePath.Text, edDestinationPath.Text);
  except
    { Catch the possible exceptions }
    MessageDlg('Incorrect source path or destination path', mtError, [mbOK], 0);
  end;
end;

procedure TForm1.btnCreateClick(Sender: TObject);
begin
  try
    { Create directory to specified path }
    TDirectory.CreateDirectory(edSourcePath.Text);
  except
    { Catch the possible exceptions }
    MessageDlg('Incorrect path', mtError, [mbOK], 0);
  end;
end;

Интерактивное копирование файлов по маске (почти тоже самое что и у предыдущего оратора)):

Код:
Procedure CopyFiles(From , Dest:String);
var
F : TShFileOpStruct;
begin
F.Wnd := 0;
F.wFunc := FO_COPY;
F.pFrom := PCHAR(From);
F.pTo := PCHAR(Dest);
F.fFlags := FOF_ALLOWUNDO or FOF_RENAMEONCOLLISION;
if ShFileOperation(F) <> 0 then ShowMessage('Copy Failed');
end;

CopyFiles('c:\testfolder2\*.txt', 'c:\testfolder');

По запуску JAR, скорее всего, нормально отработает это:

Код:
ShellExecute(
    0, 
    nil, 
    'java.exe', 
    '-Xmx1024M -Xms1024M -jar minecraft_server.jar',
    nil,
    SW_SHOW
);
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter