C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Курсак горит...КУЧА ВОПРОСОВ !!!!, Прошу прощения за повторения
Aptem
Отправлено: 18.11.2003, 17:29


Мастер участка

Группа: Участник
Сообщений: 349



Привет, ВСЕМ !!!

Помогите, пожалуйста, у меня курсак горит, но есть некоторые вопросы. Заранее прошу прощения за то, что большинство вопросов скорее всего уже встречались в форуме, но я просто вывалил сюда все, чего не знаю, или плохо понимаю. Еще раз прошу прощения.

1) У меня 2 грида, в каждом из них имеется выделение ( синяя полоска ), которое перемещается с помощью курсора, так вот: Как сделать так, чтобы при нажатии клавиши Tab это выделение пропадало на первом гриде и появлялось на втором и наоборот ( вообщем, как в FAR'е ) ?
2) Кодировки: Есть Memo, в нем текст ( не важно какой ). Мне нужно, во-первых узнать в какой он кодировке, а во-вторых иметь возможность менять эту кодировку на DOS и на KOI8-R и обратно, тот есть из любой из этих трех кодировок в любую другую.
3) Как определить размер папки в байтах? ( естественно в этой папке могут быть и другие папки, а также файлы )
4) Скажите, как определить текстовый файл, то есть моя прога должна открывать только текстовые файлы ( не двоичные ). Как это можно определить ( неужели только по расширению )?
5) Как скопировать папку? ( естественно в этой папке могут быть и другие папки, а также файлы )
6) Как запустить ассоциированное с определенным расширением файла приложение, то есть в программе, при нажатии клавиши Enter должно запускаться определенное приложение, связанное с расширением запускаемого файла.
7) Как проследить файловые операции из других приложений, то есть если в FAR'е и проводнике Windows открыть одну и ту же папку, то при создании новой папки через проводник, эта папка автоматически появится в FAR'е. Так вот, как это реализовать?
8) Как перехватить нажатие клавиши Tab на гриде? Через OnKeyDown не получается, вместо этого приложение просто меняет фокус.

Огромное спасибо за ВАШИ ответы и комментарии !
Samual
Отправлено: 18.11.2003, 18:14


Дежурный стрелочник

Группа: Участник
Сообщений: 39



1, 8. Вешаешь AppEvents на событии OnMessage Обрабатываешь своё сообщение. Как Tab не помню запусти или Spy или WinSight там увидишь(или в MSDN по поиску WM_.. TAB такого типа).
Nick
Отправлено: 19.11.2003, 09:00


Машинист паровоза

Группа: Участник
Сообщений: 247



А ты не новый файловый менеджер пишешь ?!?!?!
Gedeon
Отправлено: 19.11.2003, 10:27


Ветеран

Группа: Модератор
Сообщений: 1742



5.
CODE

#include <strutils.hpp>

bool CopyDir(AnsiString DirName,AnsiString CopyTo, bool ParentFolder){
if(ParentFolder){
AnsiString PFolder = "";
for(int i=DirName.Length();i>0;i--){
if(!(MidStr(DirName , i , 1)=="\\")){
PFolder = MidStr(DirName , i , 1) + PFolder;
}
else{
if(PFolder != ""){
CopyTo += "\\";
CopyTo += PFolder;
}
CreateDir(CopyTo);
break;
}
}
}
TSearchRec sr;
if((DirName.Length())&(CopyTo.Length())){
if(!FindFirst(DirName+"\\*.*",faAnyFile,sr))
do{
if(!(sr.Name=="." || sr.Name==".."))// это копировать не надо
if(((sr.Attr & faDirectory) == faDirectory ) ||
(sr.Attr == faDirectory)){ // найдена папка
FileSetAttr(DirName+"\\"+sr.Name, faDirectory );// сброс всяких read-only
CreateDir(CopyTo+"\\"+sr.Name);
CopyDir(DirName+"\\"+sr.Name,CopyTo+"\\"+sr.Name);//рекурсивно копируем содержимое
}
else{ // иначе найден файл
CopyFile((DirName+"\\"+sr.Name).c_str(),(CopyTo+"\\"+sr.Name).c_str(),0);// копируем файл
}
}
while (!FindNext(sr));// ищем опять, пока не найдем все
FindClose(sr);
}
return true;
}
//---------------------------------------------------------------------------

Ессли ParentFolder false, то копируется содержимое папки, если true, то вся папка.

3. В предыдущей функции меняешь ее значение на long убираешь все лишнее, а когда найден файл плюсуешь его размер к предыдущим найденным, в конце все возвращаешь.

Отредактировано Gedeon — 19/11/2003, 11:34
Gedeon
Отправлено: 19.11.2003, 12:38


Ветеран

Группа: Модератор
Сообщений: 1742



6.
CODE

AnsiString FileName = "C:\\cd.doc";
   ShellExecute( NULL,"open",FileName.c_str(),NULL,NULL,SW_SHOWDEFAULT);
Orifiel
Отправлено: 19.11.2003, 13:32


Не зарегистрирован







К вопросу № 3.

SetCurrentDir(strDirName); //делаешь нужную папку текущей
AnsiString strFullPath=ExtractFilePath(strFileName); //дополняешь
//имя файла до полного пути
int nHandle=FileOpen(strFullPath,fmOpenRead); //берешь описатель
//файла
DWORD dwFileLength+=filelength(nHandle); //длина файла в байтах
//или -1, если файл не существует

И так для каждого файла в нужной папке.
Fred
Отправлено: 19.11.2003, 14:40


Ученик-кочегар

Группа: Участник
Сообщений: 19



1.
CODE

void __fastcall TForm1::StringGrid1Enter(TObject *Sender)
{
StringGrid1->TabOrder = 0;
StringGrid2->TabOrder = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid2Enter(TObject *Sender)
{
StringGrid1->TabOrder = 1;
StringGrid2->TabOrder = 0;
}
//---------------------------------------------------------------------------

Вернуться в Вопросы программирования в C++Builder