Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Тут можно читать онлайн Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Советы по Delphi. Версия 1.4.3 от 1.1.2001
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - описание и краткое содержание, автор Валентин Озеров, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать книгу онлайн бесплатно, автор Валентин Озеров
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

// А теперь можно в приложении-передатчике

SendMessage(HWND_BROADCAST, FM_FINDPHOTO, 0, 0);

Кстати, для посылки сообщения дочерним контролам некоего контрола можно использовать метод Broadcast.

Как избавиться от торможения модальных окон?

Igor Nikolaev aKa The Spriteсоветует:

Hемодальные диалоговые окна, находящиеся на экране во время выполнения длительных операций,могут реагировать на действия пользователя очень медленно. Это ограничение Windows, и обойти его можно так:

whileFlag do begin

PerformOperation;

Application.ProcessMessages;

Flag:=ContinueOperation;

end;

Моя программа довольно долго делает какую-то полезную работу, типа чтения дерева каталогов или обильных вычислений, и в этот момент почти не работают остальные программы. Как разрешить им это делать?

Nomadicотвечает:

A: Application.ProcessMessages.

(AA): Если вы хотите отдавать timeslices в нитях, пользуйтесь Sleep(0); это отдаст остаток слайса системе.

(Win16) Если вы хотите разрешить отработку сообщений другим программам, но не вашей, то лучше пользоваться Yield().

Файловая система

Метка диска под Win32

По моему глубокому убеждению для получения метки диска в среде Win95 необходимо использовать FindFile. Но это не работает, так?

Правильно, FindFile в Win32 больше не возвращает имя диска, поскольку в не-FAT файловых системах (например, в NTFS) это работает иначе, чем в FAT. Вместо этого используйте функцию API GetVolumeInformation.

– Peter Below

Восстанавление длинных имен файлов по известным коротким

borisсоветует:

//---------------------------------------------------------------------

// Восстанавливает длинные имена файлов по известным коротким (8.3)

// В качестве аргумента принимает полный или неполный (в т.ч. относительный)

// путь к файлу, например 'C:\WINDOWS\РАБОЧИ~1\ИТАКДА~1.LNK' или

// '..\..\COMMON~1\BORLAN~1\BDE\BDEREA~1.TXT'. Понимает сетевые имена.

// Возвращает полный(!) путь типа 'C:\Windows\Рабочий стол\и так далее.lnk',

// 'C:\Program Files\Common Files\Borland Shared\BDE\bdereadme.txt',

// '\\Computer\resource\Folder with long name\File with long name.ext'

//---------------------------------------------------------------------

FunctionRestoreLongName(fn: string): string;

functionLookupLongName( constfilename: string): string;

varsr: TSearchRec;

begin

ifFindFirst(filename, faAnyFile, sr)=0 thenResult:=sr.Name

elseResult:=ExtractFileName(filename);

SysUtils.FindClose(sr);

end;

functionGetNextFN: string;

vari: integer;

begin

Result:='';

ifPos('\\', fn)=1 then begin

Result:='\\';

fn:=Copy(fn, 3, length(fn)-2);

i:=Pos('\', fn);

ifi<>0 then begin

Result:=Result+Copy(fn,1,i);

fn:=Copy(fn, i+1, length(fn)-i);

end;

end;

i:=Pos('\', fn);

ifi<>0 then begin

Result:=Result+Copy(fn,1,i-1);

fn:=Copy(fn, i+1, length(fn)-i);

end else begin

Result:=Result+fn;

fn:='';

end;

end;

Varname: string;

Begin

fn:=ExpandFileName(fn);

Result:=GetNextFN;

Repeat

name:=GetNextFN;

Result:=Result+'\'+LookupLongName(Result+'\'+name);

Untillength(fn)=0;

End;

Как указать системе на необходимость сбросить буфера *.INI-файла на диск?

Nomadicсоветует:

procedureFlushIni(FileName: string);

var

{$IFDEF WIN32}

CFileName: array[0..MAX_PATH] ofWideChar;

{$ELSE}

CFileName: array[0..127] ofChar;

{$ENDIF}

begin

{$IFDEF WIN32}

if(Win32Platform = VER_PLATFORM_WIN32_NT) then begin

WritePrivateProfileStringW( nil, nil, nil, StringToWideChar(FileName, CFileName, MAX_PATH));

end else begin

WritePrivateProfileString( nil, nil, nil, PChar(FileName));

end;

{$ELSE}

WritePrivateProfileString( nil, nil, nil, StrPLCopy(CFileName, FileName, SizeOf(CFileName) – 1));

{$ENDIF}

end;

Копирование файлов III

Nomadicсоветует:

Можно так:

procedureCopyFile( constFileName, DestName: TFileName);

var

CopyBuffer: Pointer; { buffer for copying }

TimeStamp, BytesCopied: Longint;

Source, Dest: Integer; { handles }

Destination: TFileName; { holder for expanded destination name }

const

ChunkSize: Longint = 8192; { copy in 8K chunks }

begin

Destination := ExpandFileName(DestName); { expand the destination path }

ifHasAttr(Destination, faDirectory) then{ if destination is a directory... }

Destination := Destination + '\' + ExtractFileName(FileName); { ...clone file name }

TimeStamp := FileAge(FileName); { get source's time stamp }

GetMem(CopyBuffer, ChunkSize); { allocate the buffer }

try

Source := FileOpen(FileName, fmShareDenyWrite); { open source file }

ifSource < 0 then raiseEFOpenError.Create(FmtLoadStr(SFOpenError, [FileName]));

try

Dest := FileCreate(Destination); { create output file; overwrite existing }

ifDest < 0 then raiseEFCreateError.Create(FmtLoadStr(SFCreateError, [Destination]));

try

repeat

BytesCopied := FileRead(Source, CopyBuffer^, ChunkSize); { read chunk }

ifBytesCopied > 0 then{ if we read anything... }

FileWrite(Dest, CopyBuffer^, BytesCopied); { ...write chunk }

untilBytesCopied < ChunkSize; { until we run out of chunks }

finally

FileClose(Dest); { close the destination file }

{ SetFileTimeStamp(Destination, TimeStamp);} { clone source's time stamp }{!!!}

end;

finally

FileClose(Source); { close the source file }

end;

finally

FreeMem(CopyBuffer, ChunkSize); { free the buffer }

end;

FileSetDate(Dest,FileGetDate(Source));

end;

Хм. IMHO крутовато будет такие функции писать, когда в большинстве случаев достаточно что-нубудь типа нижеприводимого, причем оно даже гибче, так как позволяет скопировать как весь файл пpи From и Count = 0, так и произвольный его кусок.

functionCopyFile(InFile, OutFile: String; From, Count: Longint): Longint;

varInFS, OutFS: TFileStream;

begin

InFS := TFileStream.Create(InFile, fmOpenRead);

OutFS := TFileStream.Create(OutFile, fmCreate);

InFS.Seek(From, soFromBeginning);

Result := OutFS.CopyFrom(InFS, Count);

InFS.Free;

OutFS.Free;

end;

try..except расставляются по вкусу, а навороты вроде установки атрибутов, даты и времени файла и т.п. для ясности удалены, да и не нужны они в основном никогда.

Конечно, под Win32 имеет смысл использовать функции CopyFile, SHFileOperation.

Как получить имя папки pабочего стола (не чеpез registry)?

Nomadicсоветует:

Просто очень хочется поработать с shell functions.

В этом примере делается и это -

procedureTForm1.Button1Click(Sender: TObject);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валентин Озеров читать все книги автора по порядку

Валентин Озеров - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Советы по Delphi. Версия 1.4.3 от 1.1.2001 отзывы


Отзывы читателей о книге Советы по Delphi. Версия 1.4.3 от 1.1.2001, автор: Валентин Озеров. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x