Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-11-26, 17:02x



Odpowiedz w temacie  [ Posty: 9 ] 
FileDlg z definicją katalogu 
Autor Wiadomość

Rejestracja: 2009-04-20, 07:37
Posty: 271
Pomógł: 4
Post 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
Wyświetl profil
Autor Wiadomość
 



Rejestracja: 2013-10-02, 08:42
Posty: 23
Pomógł: 2
Post 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
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: FileDlg z definicją katalogu
Ta wiadomość była pomocna.(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
hmopenfile01.jpg [ 98.86 KiB | Przeglądany 6611 razy ]


Załącznik:
hmopenfile02.jpg
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.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());

        }
    }
}


_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2015-05-29, 17:01
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: FileDlg z definicją katalogu
Wprowadziłem małą modyfikację do kodu wyżej i teraz Okno jest modalne.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2015-05-30, 23:01
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: FileDlg z definicją katalogu
Ta wiadomość była pomocna.(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 - 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

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2015-05-30, 23:33
Wyświetl profil

Rejestracja: 2015-05-31, 20:12
Posty: 1
Post 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
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: FileDlg z definicją katalogu
Zgadzam się. Prościej i bardziej elegancko.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2015-06-01, 06:46
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post 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.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2018-12-31, 14:07
Wyświetl profil

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post 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

_________________
zz


2019-01-03, 23:08
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 9 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. automatyczne dodawanie katalogu w katalogu raportów

w Programowanie

piotrm

7

5079

2011-03-07, 20:28

rafal Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. FileDlg z dynamiczną maską

w Programowanie

zz

7

4092

2019-01-11, 09:20

rafal Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Błedna definicja dokumentu

w Techniczne

aiona

0

2281

2019-01-10, 09:16

aiona Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Definicja formuły a lista arg.

w Programy Kadrowo Płacowe

gregee123

9

7707

2009-09-01, 10:38

TS Wyświetl najnowszy post



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

Szukaj:
Przejdź do:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant