|
|
Strona 1 z 1
|
[ Posty: 9 ] |
|
FileDlg z definicją katalogu
Autor |
Wiadomość |
iredy
Rejestracja: 2009-04-20, 07:37 Posty: 271 Pomógł: 4
|
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
|
2015-05-06, 23:43 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
alan0z
Rejestracja: 2013-10-02, 08:42 Posty: 23 Pomógł: 2
|
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.
|
2015-05-26, 18:18 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: FileDlg z definicją katalogu
(1)
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 6611 razy ]
Załącznik:
hmopenfile02.jpg [ 63.78 KiB | Przeglądany 6611 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.aspxMoż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());
} } }
|
2015-05-29, 17:01 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: FileDlg z definicją katalogu
Wprowadziłem małą modyfikację do kodu wyżej i teraz Okno jest modalne.
|
2015-05-30, 23:01 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: FileDlg z definicją katalogu
(1)
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 - includeKod: /"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ładKod: #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
|
2015-05-30, 23:33 |
|
|
norro78
Rejestracja: 2015-05-31, 20:12 Posty: 1
|
Re: FileDlg z definicją katalogu
Nie prościej jest napisać kontrolkę w CSharp i potem użyć jej za pomocą dispatcha?
|
2015-05-31, 20:15 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: FileDlg z definicją katalogu
Zgadzam się. Prościej i bardziej elegancko.
|
2015-06-01, 06:46 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
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.
|
2018-12-31, 14:07 |
|
|
zz
Rejestracja: 2008-03-10, 14:01 Posty: 593
|
Re: FileDlg z definicją katalogu
_________________ zz
|
2019-01-03, 23:08 |
|
|
|
Strona 1 z 1
|
[ Posty: 9 ] |
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 11 gości |
|
Nie możesz tworzyć nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników
|
|
|
|