Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/36: Рейтинг темы: голосов - 36, средняя оценка - 4.83
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1

Каким компонентом можно реализовать такое?

01.07.2012, 02:31. Показов 8267. Ответов 89
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Каким компонентом можно реализовать такое?
Миниатюры
Каким компонентом можно реализовать такое?  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.07.2012, 02:31
Ответы с готовыми решениями:

Каким компонентом продемонстрировать выбранный цвет
Уважаемые здравствуйте! Вопрос детский конечно, но всё же хотябы помогите где рыть и какой это может быть компонент в билдере ... ...

Каким компонентом воспользоваться, чтобы отправить E-mail, если у меня инет через прокси?
Пробовал NMSMTP, IdSMTP, но там нет настроек прокси.

Игра "Дурак", каким компонентом воспользоваться и как.
Пытаюсь я написать карточную игру дурак, чтобы можно было играть по локальной сети или через Хамачи. Играть можно будет двум и более людям....

89
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
14.07.2012, 19:30  [ТС]
Студворк — интернет-сервис помощи студентам
BRcr, разобрался я..почитал теории...работает..
Только вот...
Как освобождать память?в 2 раза занимает больше теперь памяти...

Цитата Сообщение от BRcr Посмотреть сообщение
timer_waits_for_explorer *t_wait_disk = NULL;
Куда правильней добавлять?
Если так?
C++
1
2
3
4
5
6
7
8
9
void __fastcall TMain::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 )
    {
        char DiskLabel[MAX_PATH];             //ìåòêà äèñêà
        timer_waits_for_explorer *t_wait_disk = NULL;
        WORD OldErrorMode;                   //îòêëþ÷àåì ïîêàç îøèáîê
        AnsiString disk;                    //ïåðåìåííàÿ disk òèïà  AnsiString
        DWORD dr = GetLogicalDrives( );    // ôóíêöèÿ âîçâðàùàåò áèòîâóþ ìàñêó
        for ( int x = 1; x < 26; x++ ) {  // ïðîõîäèìñÿ öèêëîì ïî áèòàì
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.07.2012, 01:07
Ну и где вы ее выделяете?

Добавлено через 5 минут
Можно уменьшить размер процесса в памяти.
Программа разрастается
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.07.2012, 01:29  [ТС]
LK, я видел этот код, но как грамотно реализовать то?На таймер вешать, иль ещё как можно?
Цитата Сообщение от LK Посмотреть сообщение
Ну и где вы ее выделяете?
не понял, что выделяю?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.07.2012, 01:33
C++
1
2
3
4
for(int x=1;x<26;x++) { // проходимся циклом по битам
// истчо куча непонятного кода
//...
ProcessReduceMemory();
например
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.07.2012, 01:50  [ТС]
LK, это то всё хорошо, но при использовании кода от BRcr размер памяти потребляемой выросло почти в 3 раза, около 20 мб...
Цитата Сообщение от LK Посмотреть сообщение
например
а я поставил при разворачивании с трея..
C++
1
2
3
4
5
6
7
void __fastcall TMain::TrayIcon1Restore(TObject *Sender)
{
    ShowWindow( Handle, SW_SHOW );      //âîñòàíàâëèâàåì îêíî
    ShowWindow( Application->Handle, SW_SHOW );  //âîñòàíàâëèâàåì îêíî
    Application->ShowMainForm = true;  //âîñòàíàâëèâàåì îêíî
    ProcessReduceMemory();
    }
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.07.2012, 02:12
Ddv122, а смысл при разворачивании из трея, если у вас основная работа WMDeviceChange ? Намусорили - подмели, я так понимаю.
Шо такое "код BRcr" понятия не имею.

Добавлено через 1 минуту
Или наоборот, почистить память при сворачивании программы, т.е., когда активных действий не предполагается и зря занимать память смысла нет.

Добавлено через 42 секунды
Да хоть при каждом телодвижении, ваапчета.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.07.2012, 17:38  [ТС]
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class timer_waits_for_explorer
               : public TTimer {
public:
    AnsiString disk;
    __fastcall timer_waits_for_explorer( TComponent *owner )
                   : TTimer( owner ) {
        Interval = 500;
    };
    void __fastcall set_disk_and_start( AnsiString _disk ) {
        disk = _disk;
        Enabled = true;
    };
};
// ---------------------------------------------------------------------------
void __fastcall TMain::execute_t_wait_disk( TObject *Sender ) {
    timer_waits_for_explorer *t = dynamic_cast <timer_waits_for_explorer *> ( Sender );
    if ( ! t->disk.IsEmpty( ) ) {
        if ( DirectoryExists( t->disk ) ) {
            TMessage msg;
            msg.Msg = WM_DEVICECHANGE;
            msg.WParam = 0x8000;
            WMDeviceChange( msg );
            t->Enabled = false;
        }
    }
    else {
        t->Enabled = false;
    }
}
// ---------------------------------------------------------------------------
// ...
timer_waits_for_explorer *t_wait_disk = NULL; // это желательно в классе формы, а в ее деструкторе освобождение
// ...
// ---------------------------------------------------------------------------
void __fastcall TMain::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 )
    {
        // ...
        for ( int x = 1; x < 26; x++ ) {
            if ( ( dr >> x ) & 1 ) {
                // ...
                if ( ready )
                {
                    // ...
                }
                else
                {
                    if ( ! t_wait_disk ) {
                        t_wait_disk = new timer_waits_for_explorer( this );
                        t_wait_disk->OnTimer = &execute_t_wait_disk;
                    }
                    t_wait_disk->set_disk_and_start( disk );
                }
            }
        }
    }
    // ...
 }
Вот в этом коде....

Добавлено через 7 часов 19 минут
Заметил баги в этом коде
если подключена флэшка в пк и подключаем другую, программа зависает на 5 секунд
В лог копируется по 2 - 3 раза одно и тоже...
ну и размер памяти увеличивается
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.07.2012, 17:49
Цитата Сообщение от Ddv122 Посмотреть сообщение
если подключена флэшка в пк и подключаем другую, программа зависает на 5 секунд
В лог копируется по 2 - 3 раза одно и тоже...
Дык, давно заметил, думал, фича такая .

Добавлено через 1 минуту
Видимо, не подвисает, а думает, а обработки думания нет.
Ну и логично, что добавляет, поскольку, видимо, код добавления у вас есть, а проверки на предмет наличия аналогичных строк - нет, что не смертельно, имхо.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.07.2012, 18:13  [ТС]
LK, вот такой вот лог) флэшка вставлена 1 раз)
C++
1
2
3
4
5
6
7
8
9
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:25  | Подключен накопитель: (G:) A3cam
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:25  | Альтернативная защита ранее была скопирована на диск: (G:)
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:25  | Подключен накопитель: (G:) A3cam
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:25  | Альтернативная защита ранее была скопирована на диск: (G:)
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:25  | Подключен накопитель: (G:) A3cam
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:26  | Альтернативная защита ранее была скопирована на диск: (G:)
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:26  | Открыт диск: (G:)
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:26  | Открыт диск: (G:)
MICROSO-A2HC8V9\DDv122 |  15.07.2012 17:12:26  | Открыт диск: (G:)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
15.07.2012, 18:24
Ну и я шас все брошу и начну гадать это у вас таймер глючит или где...

Добавлено через 1 минуту
по ходу
запускаю программу - флешка не подключна
Code
1
2
3
4
5
6
7
Утилита Flash Cleaner
lala\fafa |  13.07.2012 18:41:54  | Подключен накопитель: (L:) MINIPE
lala\fafa |  13.07.2012 18:42:00  | Защита уже установлена на диск: (L:)
lala\fafa |  13.07.2012 19:02:39  | Подключен накопитель: (L:) MINIPE
lala\fafa |  13.07.2012 19:02:40  | Защита уже установлена на диск: (L:)
lala\fafa |  13.07.2012 19:32:56  | Подключен накопитель: (L:) MINIPE
lala\fafa |  13.07.2012 19:32:59  | Защита уже установлена на диск: (L:)
Добавлено через 1 минуту
Подключаю флешку.
К стати, программа при этом не висит, таки действительно думает, что хорошо. Думающая программа - это всегда - хорошо .
Ну и фишка:
Code
1
2
3
4
5
6
7
8
9
10
Утилита Flash Cleaner
lala\fafa |  13.07.2012 18:41:54  | Подключен накопитель: (L:) MINIPE
lala\fafa |  13.07.2012 18:42:00  | Защита уже установлена на диск: (L:)
lala\fafa |  13.07.2012 19:02:39  | Подключен накопитель: (L:) MINIPE
lala\fafa |  13.07.2012 19:02:40  | Защита уже установлена на диск: (L:)
lala\fafa |  13.07.2012 19:32:56  | Подключен накопитель: (L:) MINIPE
lala\fafa |  13.07.2012 19:32:59  | Защита уже установлена на диск: (L:)
Подключение флешки
lala\fafa |  15.07.2012 17:22:20  | Подключен накопитель: (L:) MINIPE
lala\fafa |  15.07.2012 17:22:23  | Защита уже установлена на диск: (L:)
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
15.07.2012, 18:28  [ТС]
LK, я же и говорю всё так с этим вот кодом
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class timer_waits_for_explorer
               : public TTimer {
public:
    AnsiString disk;
    __fastcall timer_waits_for_explorer( TComponent *owner )
                   : TTimer( owner ) {
        Interval = 500;
    };
    void __fastcall set_disk_and_start( AnsiString _disk ) {
        disk = _disk;
        Enabled = true;
    };
};
// ---------------------------------------------------------------------------
void __fastcall TMain::execute_t_wait_disk( TObject *Sender ) {
    timer_waits_for_explorer *t = dynamic_cast <timer_waits_for_explorer *> ( Sender );
    if ( ! t->disk.IsEmpty( ) ) {
        if ( DirectoryExists( t->disk ) ) {
            TMessage msg;
            msg.Msg = WM_DEVICECHANGE;
            msg.WParam = 0x8000;
            WMDeviceChange( msg );
            t->Enabled = false;
        }
    }
    else {
        t->Enabled = false;
    }
}
// ---------------------------------------------------------------------------
// ...
timer_waits_for_explorer *t_wait_disk = NULL; // это желательно в классе формы, а в ее деструкторе освобождение
// ...
// ---------------------------------------------------------------------------
void __fastcall TMain::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 )
    {
        // ...
        for ( int x = 1; x < 26; x++ ) {
            if ( ( dr >> x ) & 1 ) {
                // ...
                if ( ready )
                {
                    // ...
                }
                else
                {
                    if ( ! t_wait_disk ) {
                        t_wait_disk = new timer_waits_for_explorer( this );
                        t_wait_disk->OnTimer = &execute_t_wait_disk;
                    }
                    t_wait_disk->set_disk_and_start( disk );
                }
            }
        }
    }
    // ...
 }
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
15.07.2012, 21:00
Проблема по невнимательности была упущена мной. Я ж не тестировал код.

Это ж очевидно. В обработчике devicechange идет обход циклом всех накопителей. И, что критично, здесь же происходит обработка каждого отдельного накопителя. Это неверный подход. Если на каком-то из них DirectoryExists() возвращает false, запускается таймер на проверку этого накопителя, затем на срабатывании таймера опять вызывается WMDeviceChange и опять идет обход всех циклом и опять по кругу.
Дополнительно к этому при проходе цикла может получиться так, что DirectoryExists() даст отмашку на двух или более накопителях. В этом случае, если таймер уже работает по предыдущему, то будет подменен объект проверки и при следующем ontimer будет проверяться уже подмененный объект, что не есть верно.
Косяки с памятью, видать, тоже отсюда откуда-то растут.

Я ж говорил изначально - решение сырое, надо подгонять.
На вскидку, первое - следует разнести обход накопителей и обработку каждого по отдельным методам, чтобы в таймере уже вызывать метод обработки одного конкретного накопителя, а не запускать опять цикл. Второе - завести в таймере вместо переменной disk массив таких переменных, чтоб можно было в него добавлять объекты проверки, ничего не подменяя.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
30.10.2012, 23:35  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
На вскидку, первое - следует разнести обход накопителей и обработку каждого по отдельным методам, чтобы в таймере уже вызывать метод обработки одного конкретного накопителя, а не запускать опять цикл. Второе - завести в таймере вместо переменной disk массив таких переменных, чтоб можно было в него добавлять объекты проверки, ничего не подменяя.
А можно не много подробнее??
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
31.10.2012, 22:50
Вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   // пытаемcя открыть корневую директорию
                    UINT DriveType = GetDriveType( disk.c_str( ) );  // получаем тип диска
                    if ( (DriveType != DRIVE_CDROM &                // исключаем CDROMы
                            DriveType != DRIVE_FIXED &             // исключаем  HDD
                            DriveType != DRIVE_RAMDISK &          // исключаем  Ram disk
                            DriveType != DRIVE_REMOTE &          //исключаем FDD
                            DriveType != DRIVE_NO_ROOT_DIR &    //исключаем повреждённые диски
                            DriveType != DRIVE_UNKNOWN))       //исключаем неизвестные диски
                    {
                    
                        Edit1->Text=disk;           //результат в Edit1
                        Button1Click(0) ;          //обновляем drevo
                        if ( Settings->CheckBox5->Checked ) {   //если стоит галочка на  CheckBox
                            Button4->Click( );                  //выполняется Button
                        }
в отдельный метод, скажем, по имени handle_disk(AnsiString disk). В обработчике WMDeviceChange вызываем, что логично, вот так:
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
void __fastcall TMain::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 )
    {
        // ...
        for ( int x = 1; x < 26; x++ ) {
            if ( ( dr >> x ) & 1 ) {
                // ...
                if ( ready )
                {
                    handle_disk( disk );
                }
                else
                {
                    if ( ! t_wait_disk ) {
                        t_wait_disk = new timer_waits_for_explorer( this );
                        t_wait_disk->OnTimer = &execute_t_wait_disk;
                    }
                    t_wait_disk->set_disk_and_start( disk );
                }
            }
        }
    }
    // ...
 }
А таймер соответственно переписываем вот так:
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
class timer_waits_for_explorer
               : public TTimer {
public:
    std::vector<AnsiString> disks;
    __fastcall timer_waits_for_explorer( TComponent *owner )
                   : TTimer( owner ) {
        Interval = 500;
    };
    void __fastcall set_disk_and_start( AnsiString _disk ) {
        disks.push_back( _disk );
        Enabled = true;
    };
};
// ---------------------------------------------------------------------------
void __fastcall TMain::execute_t_wait_disk( TObject *Sender ) {
    timer_waits_for_explorer *t = dynamic_cast <timer_waits_for_explorer *> ( Sender );
    for ( size_t i = 0; i < t->disks.size( ); ++i ) {
        if ( t->disks[i].IsEmpty( ) ) {
            t->disks.erase( t->disks.begin( ) + i-- );
        }
        else if ( DirectoryExists( t->disks[i] ) ) {
            handle_disk( t->disks[i] );
            t->disks.erase( t->disks.begin( ) + i-- );
        }
        if ( t->disks.empty( ) ) {
            t->Enabled = false;
        }
    }
}
Таким нехитрым образом мы отучаем таймер вызывать цикл обхода всех накопителей при наступлении готовности целевого.
Попутно я еще добавил множественное отслеживание дисков. Правда, не гарантирую отсутствие мелких косячков, код я не отлаживал.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
01.11.2012, 11:18  [ТС]
спасибо.
Все работает, но проблема решена на 50%...
Подключаю телефон там 2 флэшки.
В програме в отчет идет 3 подключения почему то.
Как бы 1 флэшка, 2 флэшка, и 1 флэшка еще раз.хоть подключено 2.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.11.2012, 15:00
Три раза вызывается set_disk_and_start() или таймер неправильно отрабатывает?
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
01.11.2012, 20:01  [ТС]
BRcr, А логе
Code
1
2
3
4
5
6
7
8
9
01.11.2012 18:50:50  |  USB-накопитель отключен
01.11.2012 18:51:00  | Подключен накопитель: (F:) 
01.11.2012 18:51:00  | Подключен накопитель: (F:) 
01.11.2012 18:51:00  | Подключен накопитель: (J:) 
01.11.2012 18:57:04  |  USB-накопитель отключен
01.11.2012 18:57:07  | Подключен накопитель: (F:) 
01.11.2012 18:57:08  | Подключен накопитель: (K:) EnDi
01.11.2012 18:57:08  | Подключен накопитель: (F:) 
01.11.2012 19:03:42  |  USB-накопитель отключен
А код такой 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
void __fastcall TForm1::WMDeviceChange( TMessage &Message ) {
    if ( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8000 )
    {
        timer_waits_for_explorer *t_wait_disk = NULL; // это желательно в классе формы, а в ее деструкторе освобождение
        WORD OldErrorMode;                   //отключаем показ ошибок
        AnsiString disk;                    //переменная disk типа  AnsiString
        DWORD dr = GetLogicalDrives( );    // функция возвращает битовую маску
        for ( int x = 1; x < 26; x++ ) {
            if ( ( dr >> x ) & 1 ) {
                disk = AnsiString( ( char )( 65 + x ) ) + ":\\"; // получаем литеру диска
                OldErrorMode = SetErrorMode( SEM_FAILCRITICALERRORS ); // убираем показ ошибок
                bool ready = DirectoryExists(disk); // пытаемcя открыть корневую директорию
                if (ready)
                               {
                                  handle_disk( disk );
 
                                   }
                else
                {
                    if ( ! t_wait_disk ) {
                        t_wait_disk = new timer_waits_for_explorer( this );
                        t_wait_disk->OnTimer = &execute_t_wait_disk;
                    }
                    t_wait_disk->set_disk_and_start( disk );
 
 
    }}}}
    if( Message.Msg == WM_DEVICECHANGE && Message.WParam == 0x8004 )  //ловим отключение
    {
        dt = Now( );       // полный формат даты
        redtLog->Lines->Add(DateTimeToStr(dt) + "  | " + " USB-накопитель отключен");  //в отчёт отключение
}}
и код H
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
private:    // User declarations
void virtual __fastcall WMDeviceChange(TMessage &Message);
 
public:     // User declarations
 
 #pragma option push -vi-
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_DEVICECHANGE,TMessage,WMDeviceChange);
END_MESSAGE_MAP(TForm);
 
#pragma option pop
 class timer_waits_for_explorer
               : public TTimer {
                 public:
    std::vector<AnsiString> disks;
    __fastcall timer_waits_for_explorer( TComponent *owner )
                   : TTimer( owner ) {
        Interval = 500;
    };
    void __fastcall set_disk_and_start( AnsiString _disk ) {
        disks.push_back( _disk );
        Enabled = true;
    };
};
void __fastcall handle_disk(AnsiString disk) {
 
                   // пытаемcя открыть корневую директорию
                   char DiskLabel[MAX_PATH];
                   TDateTime dt;
                    UINT DriveType = GetDriveType( disk.c_str( ) );  // получаем тип диска
                    if ( (DriveType != DRIVE_CDROM &                // исключаем CDROMы
                            DriveType != DRIVE_FIXED &             // исключаем  HDD
                            DriveType != DRIVE_RAMDISK &          // исключаем  Ram disk
                            DriveType != DRIVE_REMOTE &          //исключаем FDD
                            DriveType != DRIVE_NO_ROOT_DIR &    //исключаем повреждённые диски
                            DriveType != DRIVE_UNKNOWN))       //исключаем неизвестные диски
                    {
 
                        GetVolumeInformation( disk.c_str( ), DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0 );    //получаем Имя диска
                        // для отчета
                        dt = Now( ); // полный формат даты
                        redtLog->Lines->Add(DateTimeToStr(dt) +
                                       "  | " + "Подключен накопитель: " "(" + ( disk.SubString(1,2) ) +
                                        ")" + " " + DiskLabel + "" );     //указываем в Лог время,дату, имя диска.
                                        redtLog->Lines->SaveToFile("Log.txt");
                        }}
 
// ---------------------------------------------------------------------------
void __fastcall TForm1::execute_t_wait_disk( TObject *Sender ) {
    timer_waits_for_explorer *t = dynamic_cast <timer_waits_for_explorer *> ( Sender );
    for ( size_t i = 0; i < t->disks.size( ); ++i ) {
        if ( t->disks[i].IsEmpty( ) ) {
            t->disks.erase( t->disks.begin( ) + i-- );
        }
        else if ( DirectoryExists( t->disks[i] ) ) {
            handle_disk( t->disks[i] );
            t->disks.erase( t->disks.begin( ) + i-- );
        }
        if ( t->disks.empty( ) ) {
            t->Enabled = false;
        }
    }
}
                        }}
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.11.2012, 23:29
Клево, только все это не дает ответа на мой вопрос. Смотри трассировщиком, где лишний вызов handle_disk() происходит.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
08.11.2012, 00:45  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
. Смотри трассировщиком, где лишний вызов handle_disk() происходит.
А как...??
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.11.2012, 08:29
Ставь breakpoints на вызов set_disk_and_start() и handle_disk(), смотри, где и сколько раз они вызываются.
Как же ты до сих пор писал? Как отлаживал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2012, 08:29

У кого-то есть идея каким образом можно такое реализовать?
Доброго дня уважаемое сообщество. Подскажите пожалуйста, как можно сделать сайт с одной страницей, но на которой есть меню, по клику на...

Каким компонентом можно показать время?
Каким компонентом в C# можно показать време например (08:00 до 14:00)

Каким компонентом можно сделать вот такую сетку
Каким компонентом можно сделать вот такую сетку в delphi.

Каким компонентом joomla 1.5 можно создать такую таблицу?
Пожалуйста помогите!!

Можно ли такое реализовать?
А можно ли сделать такое же ток с числами которые введёт пользователь? С числом разрешается производить только два действия: умножать на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru