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;
}
//---------------------------------------------------------------------------
| |
|
|