Форум программистов, компьютерный форум, киберфорум
Avazart
Войти
Регистрация
Восстановить пароль
Темы блога относятся к программированию на языке С++

В основном для C++Qt (Qt5.1) и C++ Builder (RAD 2009 и RAD XE3)
Рейтинг: 4.00. Голосов: 2.

Проект My DeskTop

Запись от Avazart размещена 12.08.2012 в 15:54
Обновил(-а) Avazart 08.02.2019 в 17:03

По просьбе трудящихся решил выложить мою так и недоработанную до конца прогу.( Builder 2009 )
Выкладываю проект в надежде что кому-то пригодитятся хотя бы отдельные части его кода.
А также возможно кто-то предложит более рациональною реализацию этой задачи.

Нажмите на изображение для увеличения
Название: MyDeskTop.jpg
Просмотров: 1014
Размер:	203.9 Кб
ID:	1142

Краткое описание.

Прога представляет не что на подобии дополнительного маленького рабочего стола. В качестве рабочего пространства использовал TImage на котором прорисовывал объекты пользовательского класса TLink. TLink хранит в себе путь к файлу и иконку программы в TIcon который собственно и прорисовывается на TImage. Объекты TLink хранятся в специальных контейнерах на основе STL. Из-за долгой загрузки пришлось вынести загрузку неактивных страничек в отдельный поток. При перетаскивании файлов на MyDeskTop создается объект TLink с помощью которого можно запускать этот файл из программы. Каждая закладка представляет файл программы с расширением ".dsk" который содержит список путей к файлам и координаты положения соответствующего объекта TLink на TImage. Предполагалось что регистрацию расширения ".dsk" в системе будет производить инсталятор поэтому при тестировании для региcтрации используется отдельная программка..

Решил выложить части кода из моей программы которые как я считаю могут быть полезными.

Перетаскивание файлов.

h-файл формы
C++
1
2
3
4
5
6
7
8
9
private:    // User declarations
      void __fastcall WMDROPFILES(TMessage&);// Перетаскивание файлов ( метод формы )
public: // User declarations
   __fastcall TForm1(TComponent* Owner);
   // добавляем отлов сообщений о перетаскивании файлов на форму
   BEGIN_MESSAGE_MAP
     MESSAGE_HANDLER(WM_DROPFILES,TMessage,WMDROPFILES);    // Перетаскивание файлов
   END_MESSAGE_MAP(TComponent);
};
cpp-файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  DragAcceptFiles(Handle,true);// регистрируем форму как принимающую файлы
}
//-------Определяем что будем делать при перетаскивание файлов-------------------------------
void __fastcall TForm1::WMDROPFILES(TMessage &Msg)
{
// ...
char chFileName[256]; //  переменная под имя файла
 
// число перетаскиваемых файлов
int count = DragQueryFileA( (HDROP)Msg.WParam, 0xFFFFFFFF,chFileName,sizeof(chFileName)); 
 
for (int i=0; i<count; i++)//цикл по файлам
  {
   DragQueryFileA( (HDROP)Msg.WParam,i,chFileName,sizeof(chFileName)); // запрос имени файла
 
   // Делаем что-то с файлом (с именем chFileName) например
   //  ListBox1->Items->Add(chFileName); // - добавляем файл в список
 
  }
 
DragFinish( (HDROP)Msg.WParam); // завершение перетаскивания
// ...
}
//---------------------------------------------------------------------------
Получить путь к обоям рабочего стола.

GetWallpaper.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "registry.hpp"
 
String GetWallpaper()
{
 String FileName;
 TRegistry *reg = new TRegistry;
 reg->RootKey = HKEY_CURRENT_USER;
 
 reg->OpenKeyReadOnly("Control Panel\\Desktop");
 FileName= reg->ReadString("WallPaper");
 
 reg->CloseKey();
 reg->Free();
 return FileName;
}
Функция возвращает путь к обоям.


Установка ассоциации нашей программы с файлами определенного расширения.

RegExt.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "registry.hpp"
 
   // Application->ExeName     ".dsk"     "mydesk"       1
void RegExt(String ProgName,String Ext,String ExtName,int index)
{
 TRegistry *reg = new TRegistry;
 reg->RootKey = HKEY_CLASSES_ROOT;
 
 reg->OpenKey(Ext,true);
 reg->WriteString("",ExtName);
 reg->CloseKey();
 
 reg->OpenKey(ExtName+"\\DefaultIcon",true);
 reg->WriteString("",Application->ExeName+","+String(index));
 reg->CloseKey();
 
 reg->OpenKey(ExtName+"\\shell\\open\\command", true);
 reg->WriteString("",ParamStr(0)+" "%1"");
 reg->CloseKey();
 
 reg->Free();
}
//----------------------------------------------------------
void UnRegExt(String Ext,String ExtName)
{
 TRegistry *reg = new TRegistry;
 reg->RootKey = HKEY_CLASSES_ROOT;
 
 reg->DeleteKey(Ext);
 reg->DeleteKey(ExtName);
 reg->Free();
}



Темы:

1. Hint для объектов на TImage
2. Перетаскивание объектов за пределы формы
3. Сохранение настроек
4. Перехват события по кнопке свернуть
5. Передача имени файла другой копии приложения.
6. Перетаскивание закладок Drag&Drop TabControl
Вложения
Тип файла: rar MyDeskTop.rar (493.2 Кб, 458 просмотров)
Тип файла: rar Регистрация MyDeskTop.rar (289.4 Кб, 841 просмотров)
Размещено в C++, C++Builder
Просмотров 11057 Комментарии 1
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Я тоже нечто такое реализовал на C#. Называется Quick Link. Все записи (ярлыки к файлам, папкам, Web-страницам) хранятся в базе данных. А сама программа по интерфейсу напоминает окно "Библиотека" в Firefox (т.е. ярлыки можно помещать в "категории", называемые виртуальными папками, и открывать эти папки как в Проводнике). Если интересно потестить прогу - https://www.cyberforum.ru/beta... 07732.html (в составе LUNAtic Explorer). Не реклама.

    Думаю тоже выложить ее исходный код, но там есть один нюанс - доступ к БД происходит через... DAO, к которому я привык во времена кодинга под VB 6
    Запись от LapisAlchemist размещена 16.08.2012 в 22:28 LapisAlchemist вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.