Добро пожаловать, 
                        
                             
                
                       
                   
          
         
       
  
										  
     
      
  
      
 
    
     
    
     
    
      
    
     
    
      
 
  
 
  
  Поиск
	
			
			
				 
				
					
					
					
					Название говорит само за себя
 
Код uses DB, DBTables, StdCtrls; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 
tSource, TDest: TTable; 
begin  
TSource := TTable.create(self); 
with TSource do begin 
DatabaseName := 'dbdemos'; 
TableName := 'customer.db'; 
open; 
end; 
TDest := TTable.create(self); 
with TDest do begin 
DatabaseName := 'dbdemos'; 
TableName := 'MyNewTbl.db'; 
FieldDefs.Assign(TSource.FieldDefs); 
IndexDefs.Assign(TSource.IndexDefs); 
CreateTable; 
end; 
TSource.close; 
end; 
 
					 
					
				 
			 
			
	 
 
	
			
			
				 
				
					
					
					
					Каким образом извлечь иконку из EXE- и DLL-файлов (ExtractAssociatedIcon) и отобразить ее на компоненте Timage или небольшой области на форме?
 
Код  
uses ShellApi; 
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
 
IconIndex : word; 
h : hIcon; 
begin 
 
IconIndex := 0; 
h := 
ExtractAssociatedIcon(hInstance, 
'C:WINDOWSNOTEPAD.EXE', 
IconINdex); 
 
 
DrawIcon(Form1.Canvas.Handle, 
10, 
10, 
h); 
end; 
 
					 
					
				 
			 
			
	 
 
	
			
			
				 
				
					
					
					
					Интересно, есть ли технология преобразования Wave-формата в обычный набор звуковых данных? К примеру, мне необходимо удалить заголовок и механизм (метод) сжатия, которые могут компилироваться и сохраняться вместе с Wave-файлами.
 
Код unit LinearSystem; 
 
interface 
 
{============== Тип, описывающий формат WAV ==================} 
type WAVHeader = record 
 
nChannels       : Word; 
nBitsPerSample  : LongInt; 
nSamplesPerSec  : LongInt; 
nAvgBytesPerSec : LongInt; 
RIFFSize        : LongInt; 
fmtSize         : LongInt; 
formatTag       : Word; 
nBlockAlign     : LongInt; 
DataSize        : LongInt; 
end; 
 
{============== Поток данных сэмпла ========================} 
const MaxN = 300;  { максимальное значение величины сэмпла } 
type SampleIndex = 0 .. MaxN+3; 
type DataStream = array[ SampleIndex ] of Real; 
 
var   N     : SampleIndex; 
 
{============== Переменные сопровождения ======================} 
type  Observation = record 
 
Name       : String[40];  {Имя данного сопровождения} 
yyy        : DataStream;  {Массив указателей на данные} 
WAV        : WAVHeader;   {Спецификация WAV для сопровождения} 
Last       : SampleIndex; {Последний доступный индекс yyy} 
MinO, MaxO : Real;        {Диапазон значений yyy} 
end; 
 
var K0R, K1R, K2R, K3R : Observation; 
 
 K0B, K1B, K2B, K3B : Observation; 
 
{================== Переменные имени файла ===================} 
var StandardDatabase : String[ 80 ]; 
 
BaseFileName      : String[ 80 ]; 
StandardOutput    : String[ 80 ]; 
StandardInput     : String[ 80 ]; 
 
{=============== Объявления процедур ==================} 
procedure ReadWAVFile  (var Ki, Kj : Observation); 
procedure WriteWAVFile (var Ki, Kj : Observation); 
procedure ScaleData    (var Kk     : Observation); 
procedure InitAllSignals; 
procedure InitLinearSystem; 
 
 
implementation 
{$R *.DFM} 
uses VarGraph, SysUtils; 
 
{================== Стандартный формат WAV-файла ===================} 
const MaxDataSize : LongInt = (MaxN+1)*2*2; 
const MaxRIFFSize : LongInt = (MaxN+1)*2*2+36; 
const StandardWAV : WAVHeader = ( 
 
nChannels       : Word(2); 
nBitsPerSample  : LongInt(16); 
nSamplesPerSec  : LongInt(8000); 
nAvgBytesPerSec : LongInt(32000); 
RIFFSize        : LongInt((MaxN+1)*2*2+36); 
fmtSize         : LongInt(16); 
formatTag       : Word(1); 
nBlockAlign     : LongInt(4); 
DataSize        : LongInt((MaxN+1)*2*2) 
); 
 
 
{================== Сканирование переменных сопровождения ===================} 
 
 
procedure ScaleData(var Kk : Observation); 
var I : SampleIndex; 
begin 
 
 
{Инициализация переменных сканирования} 
Kk.MaxO := Kk.yyy[0]; 
Kk.MinO := Kk.yyy[0]; 
 
 
{Сканирование для получения максимального и минимального значения} 
for I := 1 to Kk.Last do 
begin 
if Kk.MaxO < Kk.yyy[I] then Kk.MaxO := Kk.yyy[I]; 
if Kk.MinO > Kk.yyy[I] then Kk.MinO := Kk.yyy[I]; 
end; 
end; { ScaleData } 
 
procedure ScaleAllData; 
begin 
 
ScaleData(K0R); 
ScaleData(K0B); 
ScaleData(K1R); 
ScaleData(K1B); 
ScaleData(K2R); 
ScaleData(K2B); 
ScaleData(K3R); 
ScaleData(K3B); 
end; {ScaleAllData} 
 
{================== Считывание/запись WAV-данных ===================} 
 
VAR InFile,  : file of Byte; 
 
type Tag = (F0, T1, M1); 
type FudgeNum = record 
 
case X:Tag of 
F0 : (chrs : array[0..3] of Byte); 
T1 : (lint : LongInt); 
M1 : (up,dn: Integer); 
end; 
var ChunkSize  : FudgeNum; 
 
procedure WriteChunkName(Name:String); 
var i   : Integer; 
 
MM : Byte; 
begin 
 
for i := 1 to 4 do 
begin 
MM := ord(Name[i]); 
write(,MM); 
end; 
end; {WriteChunkName} 
 
procedure WriteChunkSize(LL:Longint); 
var I : integer; 
begin 
 
ChunkSize.x:=T1; 
ChunkSize.lint:=LL; 
ChunkSize.x:=F0; 
for I := 0 to 3 do Write(,ChunkSize.chrs[I]); 
end; 
 
procedure WriteChunkWord(WW:Word); 
var I : integer; 
begin 
 
ChunkSize.x:=T1; 
ChunkSize.up:=WW; 
ChunkSize.x:=M1; 
for I := 0 to 1 do Write(,ChunkSize.chrs[I]); 
end; {WriteChunkWord} 
 
procedure WriteOneDataBlock(var Ki, Kj : Observation); 
var I : Integer; 
begin 
 
ChunkSize.x:=M1; 
with Ki.WAV do 
begin 
case nChannels of 
1:if nBitsPerSample=16 
then begin {1..2 Помещаем в буфер одноканальный 16-битный сэмпл} 
ChunkSize.up := trunc(Ki.yyy[N]+0.5); 
if N<=Ki.Last do WriteOneDataBlock(Ki,Kj); {помещаем 4 байта и увеличиваем счетчик N} 
 
 
{Освобождаем буфер файла} 
CloseFile(  ); 
end; {WriteWAVFile} 
 
procedure InitSpecs; 
begin 
end; { InitSpecs } 
 
procedure InitSignals(var Kk : Observation); 
var J : Integer; 
begin 
 
for J := 0 to MaxN do Kk.yyy[J] := 0.0; 
Kk.MinO := 0.0; 
Kk.MaxO := 0.0; 
Kk.Last := MaxN; 
end; {InitSignals} 
 
procedure InitAllSignals; 
begin  
InitSignals(K0R); 
InitSignals(K0B); 
InitSignals(K1R); 
InitSignals(K1B); 
InitSignals(K2R); 
InitSignals(K2B); 
InitSignals(K3R); 
InitSignals(K3B); 
end; {InitAllSignals}
 
[pagebreak]
Код var ChunkName  : string[4]; 
 
procedure ReadChunkName; 
var I : integer; 
 
MM : Byte; 
begin 
 
ChunkName[0]:=chr(4); 
for I := 1 to 4 do 
begin 
Read(InFile,MM); 
ChunkName[I]:=chr(MM); 
end; 
end; {ReadChunkName} 
 
procedure ReadChunkSize; 
var I : integer; 
 
MM : Byte; 
begin 
 
ChunkSize.x := F0; 
ChunkSize.lint := 0; 
for I := 0 to 3 do 
begin 
Read(InFile,MM); 
ChunkSize.chrs[I]:=MM; 
end; 
ChunkSize.x := T1; 
end; {ReadChunkSize} 
 
procedure ReadOneDataBlock(var Ki,Kj:Observation); 
var I : Integer; 
begin 
 
if N<=MaxN then 
begin 
ReadChunkSize; {получаем 4 байта данных} 
ChunkSize.x:=M1; 
with Ki.WAV do 
case nChannels of 
1:if nBitsPerSample=16 
then begin {1..2 Помещаем в буфер одноканальный 16-битный сэмпл} 
Ki.yyy[N]  :=1.0*ChunkSize.up; 
if N<=MaxN then begin {LastN    := N;} 
Ki.Last := N; 
if Ki.WAV.nChannels=2 then Kj.Last := N; 
end 
else begin {LastN    := MaxN;} 
Ki.Last := MaxN; 
if Ki.WAV.nChannels=2 then Kj.Last := MaxN; 
 
end; 
end; 
end; {ReadOneDataBlock} 
 
procedure ReadWAVFile(var Ki, Kj :Observation); 
var MM        : Byte; 
 
I           : Integer; 
OK          : Boolean; 
NoDataYet   : Boolean; 
DataYet     : Boolean; 
nDataBytes  : LongInt; 
begin 
 
if FileExists(StandardInput) 
then 
with Ki.WAV do 
begin  { Вызов диалога открытия файла } 
OK := True; {если не изменится где-нибудь ниже} 
{Приготовления для чтения файла данных} 
AssignFile(InFile, StandardInput); { Файл, выбранный в диалоговом окне } 
Reset( InFile ); 
 
 
{Считываем ChunkName "RIFF"} 
ReadChunkName; 
if ChunkName<>'RIFF' then OK := False; 
 
 
{Считываем ChunkSize} 
ReadChunkSize; 
RIFFSize    := ChunkSize.lint; {должно быть 18,678} 
 
 
{Считываем ChunkName "WAVE"} 
ReadChunkName; 
if ChunkName<>'WAVE' then OK := False; 
 
 
{Считываем ChunkName "fmt_"} 
ReadChunkName; 
if ChunkName<>'fmt ' then OK := False; 
 
 
{Считываем ChunkSize} 
ReadChunkSize; 
fmtSize     := ChunkSize.lint;  {должно быть 18} 
 
 
{Считываем  formatTag, nChannels} 
ReadChunkSize; 
ChunkSize.x := M1; 
formatTag   := ChunkSize.up; 
nChannels   := ChunkSize.dn; 
 
 
{Считываем  nSamplesPerSec} 
ReadChunkSize; 
nSamplesPerSec  := ChunkSize.lint; 
 
 
{Считываем  nAvgBytesPerSec} 
ReadChunkSize; 
nAvgBytesPerSec := ChunkSize.lint; 
 
 
{Считываем  nBlockAlign} 
ChunkSize.x := F0; 
ChunkSize.lint := 0; 
for I := 0 to 3 do 
begin Read(InFile,MM); 
ChunkSize.chrs[I]:=MM; 
end; 
ChunkSize.x := M1; 
nBlockAlign := ChunkSize.up; 
 
 
{Считываем  nBitsPerSample} 
nBitsPerSample := ChunkSize.dn; 
for I := 17 to fmtSize do Read(InFile,MM); 
 
 
NoDataYet := True; 
while NoDataYet do 
begin 
{Считываем метку блока данных "data"} 
ReadChunkName; 
 
 
{Считываем DataSize} 
ReadChunkSize; 
DataSize := ChunkSize.lint; 
 
 
if ChunkName<>'data' then 
begin 
for I := 1 to DataSize do {пропуск данных, не относящихся к набору звуковых данных} 
Read(InFile,MM); 
end 
else NoDataYet := False; 
end; 
 
 
nDataBytes := DataSize; 
{Наконец, начинаем считывать данные для байтов nDataBytes} 
if nDataBytes>0 then DataYet := True; 
N:=0; {чтение с первой позиции} 
while DataYet do 
begin 
ReadOneDataBlock(Ki,Kj); {получаем 4 байта} 
nDataBytes := nDataBytes-4; 
if nDataBytes<=4 then DataYet := False; 
end; 
 
 
ScaleData(Ki); 
if Ki.WAV.nChannels=2 
then begin Kj.WAV := Ki.WAV; 
ScaleData(Kj); 
end; 
{Освобождаем буфер файла} 
CloseFile( InFile ); 
end 
else begin 
InitSpecs;{файл не существует} 
InitSignals(Ki);{обнуляем массив "Ki"} 
InitSignals(Kj);{обнуляем массив "Kj"} 
end; 
end; { ReadWAVFile } 
 
 
 
{================= Операции с набором данных ====================} 
 
const MaxNumberOfDataBaseItems = 360; 
type  SignalDirectoryIndex = 0 .. MaxNumberOfDataBaseItems; 
 
VAR DataBaseFile   : file of Observation; 
 
LastDataBaseItem : LongInt; {Номер текущего элемента набора данных} 
ItemNameS : array[SignalDirectoryIndex] of String[40]; 
 
procedure GetDatabaseItem( Kk : Observation; N : LongInt ); 
begin 
 
if N<=LastDataBaseItem 
then begin 
Seek(DataBaseFile, N); 
Read(DataBaseFile, Kk); 
end 
else InitSignals(Kk); 
end; {GetDatabaseItem}  
procedure PutDatabaseItem( Kk : Observation; N : LongInt ); 
begin 
 
if N<=LastDataBaseItem 
then begin 
Seek(DataBaseFile,  N); 
Write(DataBaseFile, Kk); 
LastDataBaseItem := LastDataBaseItem+1; 
end 
else while LastDataBaseItem<=N do 
begin 
Seek(DataBaseFile,  LastDataBaseItem); 
Write(DataBaseFile, Kk); 
LastDataBaseItem := LastDataBaseItem+1; 
end 
else ReportError(1); {Попытка чтения MaxNumberOfDataBaseItems} 
end; {PutDatabaseItem} 
 
procedure InitDataBase; 
begin 
 
LastDataBaseItem := 0; 
if FileExists(StandardDataBase) 
then 
begin 
Assign(DataBaseFile,StandardDataBase); 
Reset(DataBaseFile); 
while not EOF(DataBaseFile) do 
begin 
GetDataBaseItem(K0R, LastDataBaseItem); 
ItemNameS[LastDataBaseItem] := K0R.Name; 
LastDataBaseItem := LastDataBaseItem+1; 
end; 
if   EOF(DataBaseFile) 
then if   LastDataBaseItem>0 
then LastDataBaseItem := LastDataBaseItem-1; 
end; 
end; {InitDataBase} 
 
function FindDataBaseName( Nstg : String ):LongInt; 
var ThisOne : LongInt; 
begin 
 
ThisOne          := 0; 
FindDataBaseName := -1; 
while ThisOne
 
					 
					
				 
			 
			
	 
 
	
			
			
				 
				
					
					
					
					Используя Delphi, как мне сохранить BMP-изображение в JPEG-файле?
Допустим, Image1 - компонент TImage, содержащий растровое изображение. Что дальше?
Используйте следующий фрагмент кода для конвертации вашего изображения в JPEG-файл:
 
Код var 
 
MyJpeg: TJpegImage; 
Image1: TImage; 
begin 
 
Image1:= TImage.Create; 
MyJpeg:= TJpegImage.Create; 
Image1.LoadFile('TestImage.BMP');  // Чтение изображения из файла 
MyJpeg.Assign(Image1.Picture.Bitmap);  // Назначание изображения объекту MyJpeg 
MyJpeg.SaveToFile('MyJPEGImage.JPG');  // Сохранение на диске изображения в формате JPEG 
end;
 
					 
					
				 
			 
			
	 
 
	
			
			
				 
				
					
					
					
					Данный модуль позволяет читать и записывать файлы формата Unix.
Код unit StreamFile; 
 
interface 
 
Uses 
 
SysUtils; 
 
Procedure AssignStreamFile (var F : Text ; Filename : String); 
 
implementation 
 
Const 
 
BufferSize = 128; 
 
Type 
 
TStreamBuffer = Array [1..High (Integer)] of Char; 
TStreamBufferPointer = ^TStreamBuffer; 
 
 
TStreamFileRecord = Record 
Case Integer Of 
1: 
( 
Filehandle : Integer; 
Buffer : TStreamBufferPointer; 
BufferOffset : Integer; 
ReadCount : Integer; 
); 
2: 
( 
Dummy : Array [1 .. 32] Of Char 
) 
End; 
 
 
Function StreamFileOpen (var F : TTextRec) : Integer; 
 
Var 
Status : Integer; 
Begin 
With TStreamFileRecord (F.UserData) Do 
Begin 
GetMem (Buffer, BufferSize); 
Case F.Mode Of 
fmInput: 
FileHandle := FileOpen (StrPas (F.Name), fmShareDenyNone); 
fmOutput: 
FileHandle := FileCreate (StrPas (F.Name)); 
fmInOut: 
Begin 
FileHandle := FileOpen (StrPas (F.Name), fmShareDenyNone Or 
fmOpenWrite or fmOpenRead); 
 
If FileHandle <> -1 Then 
status := FileSeek (FileHandle, 0, 2); { Перемещаемся в конец файла. } 
F.Mode := fmOutput; 
End; 
End; 
BufferOffset := 0; 
ReadCount := 0; 
F.BufEnd := 0;  { В этом месте подразумеваем что мы достигли конца файла (eof). } 
If FileHandle = -1 Then 
Result := -1 
Else 
Result := 0; 
End; 
End; 
 
Function StreamFileInOut (var F : TTextRec) : Integer; 
 
Procedure Read (var Data : TStreamFileRecord); 
Procedure CopyData; 
Begin 
While (F.BufEnd < Sizeof (F.Buffer) - 2) 
And (Data.BufferOffset <= Data.ReadCount) 
And (Data.Buffer [Data.BufferOffset] <> #10) Do 
Begin 
F.Buffer [F.BufEnd] := Data.Buffer^ [Data.BufferOffset]; 
Inc (Data.BufferOffset); 
Inc (F.BufEnd); 
End; 
If Data.Buffer [Data.BufferOffset] = #10 Then 
Begin 
F.Buffer [F.BufEnd] := #13; 
Inc (F.BufEnd); 
F.Buffer [F.BufEnd] := #10; 
Inc (F.BufEnd); 
Inc (Data.BufferOffset); 
End; 
End; 
 
 
Begin 
 
 
F.BufEnd := 0; 
F.BufPos := 0; 
F.Buffer := ''; 
Repeat 
Begin 
If (Data.ReadCount = 0) Or (Data.BufferOffset > Data.ReadCount) Then 
Begin 
Data.BufferOffset := 1; 
Data.ReadCount := FileRead (Data.FileHandle, Data.Buffer^, BufferSize); 
End; 
CopyData; 
End Until (Data.ReadCount = 0) 
Or (F.BufEnd >= Sizeof (F.Buffer) - 2); 
Result := 0; 
End; 
 
 
Procedure Write (var Data : TStreamFileRecord); 
Var 
Status : Integer; 
Destination : Integer; 
II : Integer; 
Begin 
With TStreamFileRecord (F.UserData) Do 
Begin 
Destination := 0; 
For II := 0 To F.BufPos - 1 Do 
Begin 
If F.Buffer [II] <> #13 Then 
Begin 
Inc (Destination); 
Buffer^[Destination] := F.Buffer [II]; 
End; 
End; 
Status := FileWrite (FileHandle, Buffer^, Destination); 
F.BufPos := 0; 
Result := 0; 
End; 
End; 
Begin 
Case F.Mode Of 
fmInput: 
Read (TStreamFileRecord (F.UserData)); 
fmOutput: 
Write (TStreamFileRecord (F.UserData)); 
End; 
End; 
 
Function StreamFileFlush (var F : TTextRec) : Integer; 
 
Begin 
Result := 0; 
End; 
 
Function StreamFileClose (var F : TTextRec) : Integer; 
 
Begin 
With TStreamFileRecord (F.UserData) Do 
Begin 
FreeMem (Buffer); 
FileClose (FileHandle); 
End; 
Result := 0; 
End; 
 
Procedure AssignStreamFile (var F : Text ; Filename : String); 
 
Begin 
With TTextRec (F) Do 
Begin 
Mode := fmClosed; 
BufPtr := @Buffer; 
BufSize := Sizeof (Buffer); 
OpenFunc := @StreamFileOpen; 
InOutFunc := @StreamFileInOut; 
FlushFunc := @StreamFileFlush; 
CloseFunc := @StreamFileClose; 
StrPLCopy (Name, FileName, Sizeof(Name) - 1); 
End; 
End; 
end.
 
					 
					
				 
			 
			
	 
 
Внимание! Если у вас не получилось найти нужную информацию, используйте 
рубрикатор  или воспользуйтесь 
поиском  .      
   
книги  по  программированию  исходники  компоненты  шаблоны  сайтов  C++  PHP  Delphi  скачать