| 
			| 
					
						| Prokl 
								Участник    Offline | 
								|  | «  : 27-09-2011 01:20 »  |  | 
 
 void __fastcall TForm1::diski(){  //получаем название диска char DiskLabel[MAX_PATH];char *DiskName1 = (ComboBox1->Items->Strings[ComboBox1->ItemIndex]).c_str();//+"\\"WORD OldErrorMode;Label4->Caption = (ComboBox1->Items->Strings[ComboBox1->ItemIndex]).c_str();OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); // убираем показ ошибокbool ready = DirectoryExists(DiskName1); // пытаемcя открыть корневую директориюSetErrorMode(OldErrorMode); // восстанавливаем старый режим показа ошибок           if (ready)          {          GetVolumeInformation(DiskName1, DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);                     Edit1->Text =  DiskLabel;//здесь название диска          Button2->Enabled = true;          Timer1->Enabled = false;          }          else          {          Edit1->Text = "не готов";          Button2->Enabled = false;          Timer1->Enabled = true;          } delete [] DiskName1;}
этот код работает нестабильно, невсегда показывает название диска, часто показывает его неправильно. вызываю функцию: void __fastcall TForm1::ComboBox1Change(TObject *Sender){
 diski();
 }
 |  
						| 
								|  |  
								| « Последнее редактирование: 27-09-2011 19:12 от RXL » |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #1 : 27-09-2011 12:36 »  |  | 
 
 Prokl, а в чём ты видишь помощь? |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| Prokl 
								Участник    Offline | 
								|  | « Ответ #2 : 27-09-2011 12:43 »  |  | 
 
 Даже незнаю, может ошибку какую кто-нибудь подскажет... |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Dimka 
								ДеятельКоманда клуба    Offline 
								Пол:    | 
								|  | « Ответ #3 :  27-09-2011 17:34 »   |  | 
 
 Prokl, возникает впечатление, что ты этот код вообще не понимаешь. Иначе хотя бы дал пояснения о том, причём тут таймер, комбо-бокс и прочие элементы управления, и как вообще должна работать программа.
 Если вообще не понимаешь - взял кусок чужого кода, - то разговаривать, в общем-то, не о чем.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Программировать - значит понимать (К. Нюгард)Невывернутое лучше, чем вправленное (М. Аврелий)
 Многие готовы скорее умереть, чем подумать (Б. Рассел)
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #4 : 27-09-2011 19:13 »  |  | 
 
 Я отредактировал пост - подсветил две строчки кода.Prokl, расскажи, что в них делается.
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 27-09-2011 19:15 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Антон (LogRus) | 
								|  | « Ответ #5 : 28-09-2011 04:08 »  |  | 
 
 RXLох ты ж ёлки-метёлки
 я эту строчку то и не заметил
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Странно всё это.... |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #6 : 28-09-2011 05:48 »  |  | 
 
 Я ж, в основном, на BCB программирую. Оператор delete там нужен только если ты сам используешь new - в остальных случаях либо все само когда надо уничтожается, либо используются косвенные механизмы, но не delete. А тут new не видать, зато есть получение указателя на внутренний буфер объекта. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Prokl 
								Участник    Offline | 
								|  | « Ответ #7 : 28-09-2011 07:37 »  |  | 
 
 // для получения метки диска напишите следующий код:char DiskLabel[MAX_PATH];
 char *DiskName = "c:\\"; // имя диска
 GetVolumeInformation(DiskName, DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);
 // в DiskLabel находится метка диска
Это послужило мне примером для того кода. Здесь тоже нет "new", а "delete" я вставил уже после и на работу кода это не отразилось. В ComboBox создается список CD-ROMов в формате - D:\\ значение выбранной строки ComboBox  передается переменной DiskName1. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Вад | 
								|  | « Ответ #8 : 28-09-2011 10:07 »  |  | 
 
 // для получения метки диска напишите следующий код:char DiskLabel[MAX_PATH];
 char *DiskName = "c:\\"; // имя диска
 GetVolumeInformation(DiskName, DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);
 // в DiskLabel находится метка диска
Это послужило мне примером для того кода. Здесь тоже нет "new", а "delete" я вставил уже после и на работу кода это не отразилось. В ComboBox создается список CD-ROMов в формате - D:\\ значение выбранной строки ComboBox  передается переменной DiskName1.На всякий случай. Когда в строковой константе написано "\\" - на самом деле в строке слеш только один, а второй его экранирует (дань escape-последовательностям). Поэтому то, что в комбо-боксе видится как "d:\\", в константе будет "d:\\\\".  |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Prokl 
								Участник    Offline | 
								|  | « Ответ #9 : 28-09-2011 12:01 »  |  | 
 
 AnsiString DiskName1 = (ComboBox1->Items->Strings[ComboBox1->ItemIndex]);
 
 GetVolumeInformation(DiskName1.c_str(), DiskLabel, MAX_PATH, NULL, NULL, NULL, NULL, 0);
Вот две строки, которые я изменил и все заработало.RXL , спасибо |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #10 : 28-09-2011 13:15 »  |  | 
 
 Prokl, нифига не "все"! Строку 27 (в коде в начале темы) убери или получишь плавающий глюк. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Prokl 
								Участник    Offline | 
								|  | « Ответ #11 : 28-09-2011 13:29 »  |  | 
 
 Забыл написать, я ее убрал сразу |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |