dragdrop files v CLR C++

Nesvacil Jiri nesvacil na posys.eu
Pátek Září 23 08:10:03 CEST 2022


On to není list, collection,  ale array. Taky nevim jestli to mate jako 
CLR cely projekt a nebo jdete C binarnim do CLR. Pokud jdete C binarnim 
do CLR ci obracene vyplati se spis predavat primitivni typy postupne a 
na zaver zavola vykonnou metodu. Takovy universalni prevadec nez delat 
tyhle silenosti. Jinak clipboard ma uvnitr ruzne typy a nebyva to vzdy 
jen text.

Jirka

https://learn.microsoft.com/en-us/cpp/dotnet/how-to-use-arrays-in-cpp-cli?view=msvc-170

https://stackoverflow.com/questions/995434/arrays-of-strings-in-managed-c

Dne 22.09.2022 v 22:59 Pavel Hudeček napsal(a):
> :-)
> No to už je trochu zmatení. To s tím collection vypadá funkčně, až na 
> to, že jen s clipboardem. Mám to schovaný jako zálohu, že bych místo 
> hození souborů na program udělal ctrl+C a pak stisknul tlačítko.
>
> Jenže ten lst z dragdrop je System.String[]
>
> Pokusy s for each, nebo for( : vedou k chybovým hláškám, že objekt 
> nemá begin a end, nebo že nejde pracovat s každým.
>
> Vtipný je, že ve VS nikdy to C++ pořádně nefungovalo, vždycky s tím 
> byly nějaké složitosti, přitom v Builderu s tím problém nebyl a není, 
> v QT taky ne a ještě je výsledek multiplatformní. Jako kdyby pánové z 
> MS chtěli naznačit "používejte jiný jazyk, nebo jiné než naše IDE" :-)
>
> PH
>
> Dne 22.09.2022 v 20:09 Ladislav Vaiz napsal(a):
>> Když tak koukám na
>> > Collections::Specialized::StringCollection ^ list = 
>> (Collections::Specialized::StringCollection 
>> ^)e->Data->GetData(DataFormats::FileDrop,
>> tak i ta příroda se vám snaží naznačit, že je to špatná cesta :-)
>>
>> V C# je univerzální foreach, tady by to mohlo být:
>>
>> auto lst = e->Data->GetData(DataFormats::FileDrop, false);
>>
>> for each(String ^ s in lst){
>>
>>     Debug.Print("{0}\n", s);
>>
>> }
>>
>> L.
>>
>> P.S. Snažím se teď v už dříve zmiňovaném projektu používat 
>> "pokročilé" vlastnosti, co znám z C# používat v C++. Konkrétně 
>> procházení a řazení kolekcí, lambda funkce. V C++ je to šílenost. I 
>> ve "starém" C# to všechno funguje jednoduše a logicky, o LINQ v 
>> aktuálních verzích ani nemluvě. Bohužel dělat pod ESP32 v C# asi bude 
>> stejně okrajový případ jako vaše C++ CLR.
>>
>>
>> On 22.09.2022 17:54, Pavel Hudeček wrote:
>>> Tak z tohodle jsem nic rozumného nevyzískal.
>>>
>>> Ale už předtím mi selhala snaha dostat to do
>>> 1. List<String^>^ - ani nešla deklarovat proměnná takového typu
>>> 2. std::vector<std::string> o kterých se tam zmiňují
>>>
>>> jediné co jse, je
>>> auto lst = e->Data->GetData(DataFormats::FileDrop, false);
>>> (je jedno zda fale/true)
>>>
>>> lst->GetType() vyplivne samořejmě zase System.String[]
>>>
>>> ale nemá žádný ->Items, nebo něco takovýho, přes co bych z něj 
>>> dostal ty stringy
>>>
>>> PH
>>>
>>> Dne 22.09.2022 v 16:49 Nesvacil Jiri napsal(a):
>>>> https://stackoverflow.com/questions/32786187/passing-an-array-of-strings-from-c-to-c-sharp 
>>>>
>>>>
>>>> Dne 22.09.2022 v 16:43 Pavel Hudeček napsal(a):
>>>>> Trochu jsem s tím pohnul:
>>>>> Collections::Specialized::StringCollection ^ list = 
>>>>> (Collections::Specialized::StringCollection 
>>>>> ^)e->Data->GetData(DataFormats::FileDrop, true);
>>>>> for (int n=0; n<list->Count; n++) listBox1->Items->Add(list[n]);
>>>>> To jde aspoň přeložit:-)
>>>>> Ale stejně to skončí na chybě, že System.String[] nelze přetypovat 
>>>>> na System.Collections.Specialized.StringCollection.
>>>>> Takže je ten výstup jinej než z Clipboard.GetFileDropList
>>>>>
>>>>> Pořád tedy to samé: Jak v c++ udělat System.String[]?
>>>>>
>>>>> PH
>>>>>
>>>>>
>>>>> Dne 22.09.2022 v 16:25 Pavel Hudeček napsal(a):
>>>>>> No to přepínátko funguje jen částečně, asi podle toho, které 
>>>>>> části mají udělané a když stránka neobsahuje alternativní jazyk, 
>>>>>> tak ho nezobrazí vůbec. Např. u toho clipboardu se tím do c++ 
>>>>>> přepne definice, ale example už ne. Ten jde přepnout třeba do vb.
>>>>>>
>>>>>> PH
>>>>>>
>>>>>> Dne 22.09.2022 v 16:04 Ladislav Vaiz napsal(a):
>>>>>>> Asi nechcete slyšet knížecí radu, ale já bych přešel na C# :-(
>>>>>>> V MSDN se někdy dají jazyky přepnout, např. v 
>>>>>>> https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.clipboard.getdata?view=netframework-4.0
>>>>>>> je přepínátko nad nadpisem vpravo.
>>>>>>> L.
>>>>>>>
>>>>>>> On 22.09.2022 15:55, Pavel Hudeček wrote:
>>>>>>>> Dobrý den všem,
>>>>>>>>
>>>>>>>> tady
>>>>>>>> Provide file drag and drop functionality - Visual C++ | 
>>>>>>>> Microsoft Learn 
>>>>>>>> <https://learn.microsoft.com/en-us/troubleshoot/developer/visualstudio/cpp/language-compilers/provide-file-drag-drop-functionality>
>>>>>>>> je popis jak udělat, aby se v listboxu zobrazil seznam na něj 
>>>>>>>> hozeých souborů.
>>>>>>>> To funguje.
>>>>>>>>
>>>>>>>> Jak totéž udělat v C++ CLR?
>>>>>>>>
>>>>>>>> První část s DragEnter funguje:
>>>>>>>> private: System::Void listBox1_DragEnter(System::Object^ 
>>>>>>>> sender, System::Windows::Forms::DragEventArgs^  e) {
>>>>>>>>             if (e->Data->GetDataPresent(DataFormats::FileDrop))
>>>>>>>>                 e->Effect = DragDropEffects::All;
>>>>>>>>             else
>>>>>>>>                 e->Effect = DragDropEffects::None;
>>>>>>>>         }
>>>>>>>>
>>>>>>>> Ale všechny pokusy o DragDrop selhaly na tom, že nem;žu najít C 
>>>>>>>> ekvivalent pro
>>>>>>>> string[] s = (string[]) e.Data.GetData(DataFormats.FileDrop, 
>>>>>>>> false);
>>>>>>>> Nějaké nápady?
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list