Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FAQ - часто задаваемые вопросы

257
22 февраля 2007 года
kosfiz
1.6K / / 18.09.2005
В данной теме постим решения, ссылки на темы или исходники, где есть решения, на часто задаваемые вопросы.

Если в приведенных здесь решениях будут ошибки, просьба сообщить об этом модераторам форума Delphi & Kylix.

1. как определить текущую частоту процессора?
2. как программно открыть/закрыть CDRom с использованием функций mmSystem?
3. как программно открыть/закрыть CDRom с используя функцию DeviceIoConrol?
4. как сделать снимок экрана?
5. как найти все окна в системе?
6. как определить размер файла по ссылке на него? + Как поместить иконку приложения в System Tray?
7. как получить список всех работающих процессов?
8. как увидеть пароль за звездочками?
9. как скачать файл из интернета по ссылке?
10. архивирование файла методом Хаффмана.
11. как создать IE ToolBar?
12. как при помощи Open_Dialog или Save_Dialog указать дирректорию, а не файл, в которую в процессе выполнения программы будут сохранены файлы?
13. как проиграть AVI или MPEG файл с помощью MCI?
14. как можно динамически подключть DLL?
15. как работать с компортом?
16. как нажать на кнопку в чужой программе?
17. как при запуске программы узнать путь к её exe файлу?
18. Как сделать так, чтобы в Edit поставить запрет на ввод букв, т.е. чтобы вводились только цифры?
19. как получить список всех файлов расположенных в данной папке и в подпапках?
20. Как создать гиперссылку?
21. Перевод двоичного числа в десятичное и обратно.
22. Как посчитать кол-во файлов в папке?
23. Как распечатать текст содеращийся в Memo?
24. Как программно создать ярлык?
25. Как "выдрать" инфу о версии из EXE-файла?(производитель, название продукта, версия продукта, комментарий и т.д.)
26. Как удалить каталог со всем содержимым?
27. Как сделать снимок рабочего стола?
28. Как сделать, чтобы, при выводе кириллицы в консоль, отображался нормальный текст, а не "крякозяблики"?
29. Где скачать компонент ... ? (Ответ: здесь или здесь)
30. Как создать несколько папок за раз?(т.е. создать путь)
31. Как сделать, чтобы CheckBox(CheckListBox) нельзя было отмечать вручную?
32. Как сделать, чтобы программу нельзя было запустить два раза?(применение описанной функции[исходник])
33. String to HKEY
34. Задержка без таймера.
35. Отлов изменений в реестре(RegNotifyChangeKeyValue).
36. Определение времени выполнения участка кода.
37. Как обращаться к компонентам по Caption'y?
38. Как добавить пункт в контекстное меню Windows(наподобие WinRAR)
39. "Хождение" по подключам указанного ключа реестра и чтение значений
40. Работа OpenEventLog, ReadEventLog и CloseEventLog на примере полного чтения EventLog'a
41. Реакция на набор текста в Memo, по аналогии с qip("собеседник печатает сообщение")
42. Как программно кликнуть курсором мыши?
43. Как сделать аналог пипетки Paint для TImage?
44. как можно отследить точка . или запятая , используется в качестве дроби. например: 156.67 или 156,67
45. Как показать MessageBox поверх остальных окон?
46. Определение хоста и IP по адресу
47. Как прописать программу в автозапуск?
48. Как получить время создания файла?
49. Как уменьшить размер исполняемого файла?
50. Как перевести пиксели в миллиметры?

[color=red]Еще FAQ: освещен 121 вопрос[/color]
257
22 февраля 2007 года
kosfiz
1.6K / / 18.09.2005
как получить список всех файлов расположенных в данной папке?
Код:
program Example;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;
procedure findfiles(dir:string);
var fd:WIN32_FIND_DATA;
    hFindFile:DWORD;
begin
hFindFile:=FindFirstFile(pchar(dir+'*.*'),fd);
if hFindFile<>INVALID_HANDLE_VALUE then
 repeat
  if (((fd.dwFileAttributes) and(FILE_ATTRIBUTE_DIRECTORY))=FILE_ATTRIBUTE_DIRECTORY ) then
   begin
   if (string(fd.cFileName)='.') or (string(fd.cFileName)='..') then continue;
    findfiles(dir+fd.cFileName+'\')
   end
    else
    writeln(dir+fd.cFileName);
 until FindNextFile(hFindFile,fd)=false;
Windows.FindClose(hFindFile);
end;

begin
findfiles('c:\windows\');
readln;
end.
261
13 марта 2007 года
ahilles
1.5K / / 03.11.2005
Иногда нужно создать сразу несколько папок подряд, но функция CreateDir и API функции CreateDirectory, CreateDirectoryEx позволяют создать только одну папку т.е. ту папку которая самая последняя.
например, если нужно создать папку c:\papka1\podpapka1\podpapka3 при том что папки c:\papka1 или c:\papka1\podpapka1 не существует, то ничего не получится, т.е. эти функции позволяют создать папку только в существующей папке.
Вот код функции которая создаёт папку. функции можно передать ЛЮБОЙ допустимый путь и она создаст его. Допустимость пути не проверяется, даже если путь недопусти, никакого исключения не будет, потому что используются API, следовательно потом можно получить код ошибки через GetLastError.
Код:
procedure makedir(value:string);
var i,x:integer;
    cur_dir:string;
    RootDir:String;
begin
  RootDir:=value[1]+value[2]+value[3];
  SetCurrentDirectory(pchar(RootDir));
  x:=1;
  cur_dir:='';
  if (value[1]='\') then x:=2;
  for i:=x to Length(value) do
   begin
    if not (value='\')then
      cur_dir:=cur_dir+value;
    if (value='\')or (i=length(value)) then
     begin
      if not DirectoryExists(cur_dir) then
       CreateDirectory(pchar(cur_dir),0);
      SetCurrentDirectory(pchar(cur_dir));
      cur_dir:='';
     end;
   end;
end;

Практика показала, что если, например, передан путь d:\456\6*6\567, то получается так d:\456\567, в общем папка с неправильным именем игнорируется
261
11 мая 2007 года
ahilles
1.5K / / 03.11.2005
Осуществление задержки в оконном приложении без таймера, без замораживания приложения.

 
Код:
procedure Delay(DelayTime:DWORD);
var
  TheTime : LongInt;
begin
  TheTime := GetTickCount + DelayTime;

  while GetTickCount < TheTime do
    Application.ProcessMessages;
end;

в начале сохраняется текущее число миллисекунд + задержка, потом в цикле вызывается Application.ProcessMessages которая обновляет окно, обрабатывая все собщения из очереди, и каждый раз проверяется не прошло ли указанное время
257
08 мая 2008 года
kosfiz
1.6K / / 18.09.2005
кидаем на форму две кнопки и прописываем для них:
[highlight=delphi]
thrNotify: dword;
{.........................}
procedure TForm1.Button1Click(Sender: TObject);
var
thrid: dword;
begin
thrNotify:= CreateThread(nil, 0, @isNotify, nil, 0, thrid);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TerminateThread(thrNotify, 0);
end;
[/highlight]
а теперь isNotify
[highlight=delphi]
function isNotify(p:pointer):dword; stdcall;
begin
Result:=0;
while true do
if RegNotifyChangeKeyValue(HKEY_CURRENT_USER, true, REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_ATTRIBUTES or REG_NOTIFY_CHANGE_SECURITY, 0, false)=ERROR_SUCCESS then
MessageBox(0,'','',0);{делаем что необходимо, я например сообщение вывожу, чтобы показать реакцию программы на изменения}
end;
[/highlight]
данный пример отлавливает изменения в HKEY_CURRENT_USER и его подключах. обработки ошибок и т.д. предлагаю дописать самим.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог