Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

selektovanje jednog (ili vise) itema u OpenFileDialog ...

  • 7 odgovora
  • 3.402 pregleda

Najnovija ↓

selektovanje jednog (ili vise) itema u OpenFileDialog ... 13.02.2009. u 18:36 · pre 215 meseci
izmenjeno 1 put, poslednji put ghost2k3 13.02.2009. u 21:14
  1. ghost2k313.02.2009. u 21:14zapis iz teksta poruke
#1
C#

Imam openFileDialog i zelim da kada se on otvori, neki fajlovi vec budu selektovani.
Nasao sam na netu kako da selektujem sve fajlove
Code:
SendMessage(listviewHandle, 0x0111/*WM_COMMAND*/, (uint)0x00017021, (uint)0);


Onda sam takodje nasao da bi sa ovim dole kodom trebao da se selektuje item sa indexom 1,medjutim to se ne desava. SendMessage ne vraca lb_err, nego 0.
Code:
SendMessage(listviewHandle, 0x0185/*LB_SETSEL*/, true, 1);
Potpis
he he he
Re: selektovanje jednog (ili vise) itema u OpenFileDialog ... 14.02.2009. u 06:07 · pre 215 meseci #2
A kako si nasao hendl za ListView ? Mozda da je tu greska. Moras da uzmes hendl prozora dialoga pa da iteriras kroz njegove child kontrole dok ne nadjes ListView.
Potpis
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
Re: selektovanje jednog (ili vise) itema u OpenFileDialog ... 14.02.2009. u 09:19 · pre 215 meseci
izmenjeno 1 put, poslednji put ghost2k3 14.02.2009. u 09:31
  1. ghost2k314.02.2009. u 09:31zapis iz teksta poruke
#3
Ovako ide primer za selektovanje svih itema:

Code:
protected override void WndProc(ref Message m)
       {
             // Leting the Form take care off all messages.
            base.WndProc(ref m);

            if (m.Msg == 289) // Notify of message loop
            {
                uint dialogHandle = (uint)m.LParam; // Handle of the file dialog

                if (dialogHandle != m_lastDialogHandle) // Only when not already changed
                {
                    // Getting the handle of the ListBox in the OpenFileDialog dialog.
                    uint listviewHandle = FindWindowEx(dialogHandle, 0,
                    "SHELLDLL_DefView", "");

                    // Sending message to the ListBox to set the view to Thumbnails
                    //Icons=0x7029, List=0x702b, Details=0x702c, Thumbnails=0x702d,
                    //Tiles = 0x702e;
                    SendMessage(listviewHandle, 0x0111/*WM_COMMAND*/, (uint)0x702b, 0);

                    // Sending message to the ListBox to select all items.
                    uint retval = SendMessage(listviewHandle, 0x0111/*WM_COMMAND*/, (uint)0x00017021, (uint)0);
                    
                    // Remember last handle
                    m_lastDialogHandle = dialogHandle;

                }
           }


Na isti nacin i ja uzimam handle, samo sto mu saljem drugaciju poruku sa drugacijim parametrima.

Posle sam probao u test aplikaciji (form, button, listview) da handle uzmem sa listView.Handle, medjutim ni tada ne radi.
Potpis
he he he
Re: selektovanje jednog (ili vise) itema u OpenFileDialog ... 14.02.2009. u 12:24 · pre 215 meseci #4
Hmmm, vidim gde je greska :) Ti ListView-u saljes poruku koja je za listbox ! I ja sam se isto zatracao .... uglavnom, pogledaj ovo http://www.devnewsgroups.net/g...rk.windowsforms/topic4250.aspx
Potpis
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
Re: selektovanje jednog (ili vise) itema u OpenFileDialog ... 14.02.2009. u 13:55 · pre 215 meseci #5
Evo bas probavam taj primer sto si mi poslao

Code:
public partial class Form1 : Form
    {
        IntPtr h;
        int index = -1;

        private const long LVIS_STATEIMAGEMASK = 0xF000;
        private const long LVIS_UNCHECKED = 0x1000;
        private const long LVIS_CHECKED = 0x2000;
        private const long LVIF_STATE = 0x8;
        private const long LVM_FIRST = 0x1000;
        private const long LVM_SETITEMSTATE = (LVM_FIRST + 43);
        private const long LVIS_SELECTED = 0x2000;

        public Form1()
        {
            InitializeComponent();
            this.listView1.HideSelection = true;
            this.listView1.MultiSelect = true;
            h = this.listView1.Handle;
        }

        public struct LVITEM
        {
            public long mask;
            public long iItem;
            public long iSubItem;
            public long state;
            public long stateMask;
            public string pszText;
            public long cchTextMax;
            public long iImage;
            public long lParam;
            public long iIndent;
        }

        [DllImport("user32.dll")]
        private static extern uint SendMessage(IntPtr Hdc, long Msg_Const, int wParam, IntPtr lParam);


        private void button1_Click(object sender, EventArgs e)
        {
            LVITEM lvItem = new LVITEM();
            lvItem.mask = LVIF_STATE;
            lvItem.stateMask = LVIS_STATEIMAGEMASK;
            lvItem.state = LVIS_SELECTED;
            IntPtr pointer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(LVITEM)));
            Marshal.StructureToPtr(lvItem, pointer, true);
            SendMessage(h, LVM_SETITEMSTATE, index, pointer);
            Marshal.FreeHGlobal(pointer);
        }
    }


Javlja mi sledecu gresku u redu gde je SendMessage(...):
"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Sad kontam da ovaj pointer nije dobar, ali ne znam kako nije dobar, deluje mi sve ok odradjeno.

Elem, poenta citave price je da kada se prikaze OpenFileDialog, neki itemi vec budu selektovani u oknu gde se nalazi lista dokumenata. E sad ako znas neki drugi nacin da se to realizuje, moze, ne mora to ovako da ide.
Potpis
he he he
Re: selektovanje jednog (ili vise) itema u OpenFileDialog ... 14.02.2009. u 15:02 · pre 215 meseci #6
Tja, nista pametno mi ne pada na pamet, ali da probas sa unsafe kodom ? Nesto kao:
Code:

//deo koda pre poziva SendMessage
unsafe{
  fix(void *p = pointer.ToPointer()){
    SendMessage(h, LVM_SETITEMSTATE, index, p);
  }
}
//pa ostatak


Jedan fajl mozes preko property-a FileName da postavis, ali za vise ne znam :(
Sigurno neko ima elegantnije resenje.
Potpis
America national sport is called baseballs. It very similar to our sport, shurik, where we take dogs, shoot them in a field and then have a party.
Re: selektovanje jednog (ili vise) itema u OpenFileDialog ... 23.03.2009. u 15:18 · pre 214 meseci #8
Inace resio sam ovo. Moze sa send message, ali nisam koristio poruke za select item, nego za klik misa na odredjenu lokaciju. Znaci send message da mi vrati lokaciju itema, pa onda send msg za ctrl pa send msg za mouse klik i tako redom :) Ako ih ima vise, pa se ne vide u jednom oknu, onda moras i da uradis skrol, pa opet ista procedura.
Potpis
he he he
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme