mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
FileDlg z definicją katalogu https://forum.mix-soft.pl/viewtopic.php?f=15&t=6627 |
Strona 1 z 1 |
Autor: | iredy [ 2015-05-06, 23:43 ] |
Tytuł: | FileDlg z definicją katalogu |
Witam, Pytanie krótkie, jak w tytule - czy jest jakaś możliwość podania domyślnego katalogu, otwieranego poleceniem FileDlg? Coś na kształt FileDialogKD z Kadr i Płac? Chodzi mi o programy handlowe (Handel, Faktura)... Z góry dzięki za odpowiedź. /pozdr irek |
Autor: | alan0z [ 2015-05-26, 18:18 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
Niegdyś, mimo wielu prób, nigdy nie udało mi się uzyskać funkcjonalności opisanej w temacie. Będę wdzięczny za informacje, jeśli komukolwiek działa "otwieranie pliku" z podaniem domyślnej ścieżki w HMF i HMP (niekoniecznie za pomocą wbudowanego FileDlg ;) ) Pzdr. |
Autor: | rafal [ 2015-05-29, 17:01 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
Poniżej przykład jak można to zrealizować. Działa domyślna ścieżka i multiselect (opcjonalnie). Niestety okno nie jest modalne. Załącznik: hmopenfile01.jpg [ 98.86 KiB | Przeglądany 6604 razy ] Załącznik: hmopenfile02.jpg [ 63.78 KiB | Przeglądany 6604 razy ] Można dalej rozbudować ten skrypt o przykładowo nadawanie tytułu okna, różnego rodzaju validacje itp... . W sumie o to wszystko co daje nam OpenFileDialog w C# https://msdn.microsoft.com/pl-pl/librar ... 10%29.aspx Może uda Wam się to jakoś udoskonalić. Kod: int sub OpenFileDialog(string DomyslnyKatalog, string MaskiPlikow, int WybierzWiele, mapValue mvWybranePliki) mvWybranePliki.Clear() dispatch fso = "Scripting.FileSystemObject" dispatch ws = "WScript.Shell" dispatch fld dispatch sfld // Katalog .NET - wymagamy wersji 4 string netFolder = ws.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\InstallPath") // zapisanie skryptu z zasobów do pliku Dialog.tmp int iSkrypt = open Katalog()+"Dialog.cs" for output string sLinia while zasoby(czytaj, sLinia) print #iSkrypt; sLinia wend Close(iSkrypt) // kompilacja skryptu do dialog.exe ws.Run(netFolder + "csc.exe /out:" + Katalog() + "Dialog.exe " + Katalog() + "Dialog.cs",0,1) // Wywołanie Dialog.exe z parametrami ws.Run((using Katalog() + "Dialog.exe \"%s\" \"%s\" \"%d\" \"%s\" \"%l\"", DomyslnyKatalog, MaskiPlikow, WybierzWiele, CurrentUser(),GetMainWindowHwnd() ),0,1) // odczyt listy polików z dialog.files int iWynik = open Katalog()+"Dialog_"+CurrentUser()+".files" for input while (Input #iWynik,sLinia) mvWybranePliki.Set( sLinia, 0 ) wend endsub // deklaracji mapy na wynik działania mapValue mvListaPlikow mvListaPlikow.Type(int) // wywołanie okna OpenFileDialog("c:\\windows","Handel (*.hm)|*.txt|All files (*.*)|*.*",1,mvListaPlikow) // wypisanie wyniku int i for i = 1 to i > mvListaPlikow.Size() print mvListaPlikow.GetKey(i) next i zasoby: using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; using System.IO; namespace FormOpenFileDialog { public class Form1 : Form { public class WindowWrapper : System.Windows.Forms.IWin32Window { public WindowWrapper(IntPtr handle) { _hwnd = handle; } public IntPtr Handle { get { return _hwnd; } } private IntPtr _hwnd; } public string sPath; [DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow(); [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); IntPtr hSymfonia; int iSymfonia; const int SW_HIDE = 0; const int SW_SHOW = 5; public Form1() { this.Load += new EventHandler(form1_Load); } private void form1_Load(object sender, EventArgs e) { string[] args = Environment.GetCommandLineArgs(); iSymfonia = Convert.ToInt32(args[5]); hSymfonia = (IntPtr)iSymfonia; WindowWrapper wrapper = new WindowWrapper(hSymfonia); string appPath = Path.GetDirectoryName(Application.ExecutablePath); StreamWriter tofile = new StreamWriter(appPath + "\\Dialog_"+ args[4] +".files"); OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = args[1]; openFileDialog1.Filter = args[2]; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; if (args[3] == "1") { openFileDialog1.Multiselect = true; } else { openFileDialog1.Multiselect = false; } if (openFileDialog1.ShowDialog(wrapper) == DialogResult.OK) { foreach (String file in openFileDialog1.FileNames) { tofile.WriteLine(file); } tofile.Close(); } this.Close(); } [STAThread] static void Main() { var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } |
Autor: | rafal [ 2015-05-30, 23:01 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
Wprowadziłem małą modyfikację do kodu wyżej i teraz Okno jest modalne. |
Autor: | rafal [ 2015-05-30, 23:33 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
zasoby: przeszkadzały w includowaniu i użyciu skryptu we własnych rozwiązaniach więc wydzieliłem skrypt c# do osobnego raportu. Raport : Mix-soft FileDialog - include Kod: /"mixfdi.sci","Mix-soft FileDialog - Include",2400,0,1.0.0,SYSTEM //"Raporty",1,14,62 limit 30000 int sub OpenFileDialog(string DomyslnyKatalog, string MaskiPlikow, int WybierzWiele, mapValue mvWybranePliki) mvWybranePliki.Clear() dispatch ws = "WScript.Shell" // czyszczenie pliku z wynikiem int iWynik = open Katalog()+"Dialog_"+CurrentUser()+".files" for output Close(iWynik) // Katalog .NET - wymagamy wersji 4 string netFolder = ws.RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\InstallPath") // zapisanie skryptu z raportu Mix-soft OpenFileDialog c# do pliku Dialog.sc int b = Open Katalog()+"AMHM51pr.dat" for base "PR" int bErr BaseError( b, 4) SetKey ( b, "skrot" ) SetKeySeg ( b, "skrot", "Mix-soft FileDialog - C#" ) if GetRec ( b,EQ ) then error "Brak raportu : Mix-soft FileDialog - C#" buf = GetField(b, "dane") int iSkrypt = open Katalog()+"Dialog.cs" for output string sLinia print #iSkrypt; buf Close(iSkrypt) // kompilacja skryptu do dialog.exe ws.Run(netFolder + "csc.exe /out:" + Katalog() + "Dialog.exe " + Katalog() + "Dialog.cs",0,1) // Wywołanie Dialog.exe z parametrami ws.Run((using Katalog() + "Dialog.exe \"%s\" \"%s\" \"%d\" \"%s\" \"%l\"", DomyslnyKatalog, MaskiPlikow, WybierzWiele, CurrentUser(),GetMainWindowHwnd() ),0,1) // odczyt listy polików z dialog.files iWynik = open Katalog()+"Dialog_"+CurrentUser()+".files" for input while (Input #iWynik,sLinia) mvWybranePliki.Set( sLinia, 0 ) wend endsub Raport : Mix-soft FileDialog - C# Kod: //"mixfdc.sci","Mix-soft FileDialog - C#",2400,0,1.0.0,SYSTEM //"Raporty",1,14,62 using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; using System.IO; namespace FormOpenFileDialog { public class Form1 : Form { public class WindowWrapper : System.Windows.Forms.IWin32Window { public WindowWrapper(IntPtr handle) { _hwnd = handle; } public IntPtr Handle { get { return _hwnd; } } private IntPtr _hwnd; } public string sPath; [DllImport("kernel32.dll")] static extern IntPtr GetConsoleWindow(); [DllImport("user32.dll")] static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); IntPtr hSymfonia; int iSymfonia; const int SW_HIDE = 0; const int SW_SHOW = 5; public Form1() { this.Load += new EventHandler(form1_Load); } private void form1_Load(object sender, EventArgs e) { string[] args = Environment.GetCommandLineArgs(); iSymfonia = Convert.ToInt32(args[5]); hSymfonia = (IntPtr)iSymfonia; WindowWrapper wrapper = new WindowWrapper(hSymfonia); string appPath = Path.GetDirectoryName(Application.ExecutablePath); StreamWriter tofile = new StreamWriter(appPath + "\\Dialog_"+ args[4] +".files"); OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = args[1]; openFileDialog1.Filter = args[2]; openFileDialog1.FilterIndex = 2; openFileDialog1.RestoreDirectory = true; if (args[3] == "1") { openFileDialog1.Multiselect = true; } else { openFileDialog1.Multiselect = false; } if (openFileDialog1.ShowDialog(wrapper) == DialogResult.OK) { foreach (String file in openFileDialog1.FileNames) { tofile.WriteLine(file); } tofile.Close(); } this.Close(); } [STAThread] static void Main() { var handle = GetConsoleWindow(); ShowWindow(handle, SW_HIDE); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } i teraz jak użyć tego we własnych raportach Raport : Mix-soft FileDialog - przykład Kod: #include "Mix-soft FileDialog - include" // deklaracjia mapy na wynik działania mapValue mvListaPlikow mvListaPlikow.Type(int) // wywołanie okna OpenFileDialog("c:\\windows","Handel (*.hm)|*.txt|All files (*.*)|*.*",1,mvListaPlikow) // wypisanie wyniku int i for i = 1 to i > mvListaPlikow.Size() print mvListaPlikow.GetKey(i) next i |
Autor: | norro78 [ 2015-05-31, 20:15 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
Nie prościej jest napisać kontrolkę w CSharp i potem użyć jej za pomocą dispatcha? |
Autor: | rafal [ 2015-06-01, 06:46 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
Zgadzam się. Prościej i bardziej elegancko. |
Autor: | rafal [ 2018-12-31, 14:07 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
tak wpisałeś? Kod: ws.Run((using Katalog() + "Dialog.exe \"%s\" \"%s\" \"%d\" \"%s\" \"%l\"", DomyslnyKatalog, MaskiPlikow, WybierzWiele, CurrentUser(),0 ),0,1) Nie podałeś modułu i wersji programu. |
Autor: | zz [ 2019-01-03, 23:08 ] |
Tytuł: | Re: FileDlg z definicją katalogu |
dokładnie tak wpisałem w temacie http://www.forum.mojasymfonia.pl/viewtopic.php?f=15&t=8918 podałem wersję Symfonii |
Strona 1 z 1 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |