Четверг, 24.09.2026, 10:25
Вы вошли как Гость | Группа "Гости"Приветствую Вас Гость | RSS
Форма входа
Меню сайта
Главная » FAQ » Программирование Delphi [ Добавить вопрос ]

Программирование Delphi [91]
Вопрос-Ответ по программированию

             uses Registry; 
 
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               reg : TRegistry; 
               ts : TStrings; 
               i : integer; 
             begin 
               reg := TRegistry.Create; 
               reg.RootKey := HKEY_LOCAL_MACHINE; 
               reg.OpenKey( 
             'SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones', 
                           false); 
               if reg.HasSubKeys then begin 
                 ts := TStringList.Create; 
                 reg.GetKeyNames(ts); 
                 reg.CloseKey; 
                 for i := 0 to ts.Count -1 do begin 
                   reg.OpenKey( 
               'SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones\' + 
                     ts.Strings[i], 
                   false); 
                   Memo1.Lines.Add(ts.Strings[i]); 
                   Memo1.Lines.Add(reg.ReadString('Display')); 
                   Memo1.Lines.Add(reg.ReadString('Std')); 
                   Memo1.Lines.Add(reg.ReadString('Dlt')); 
                   Memo1.Lines.Add('----------------------'); 
                   reg.CloseKey; 
                 end; 
                 ts.Free; 
               end else 
               reg.CloseKey; 
               reg.free; 
             end; 
Добавил: casperof

             const TIME_ZONE_ID_UNKNOWN  =  0;
       const TIME_ZONE_ID_STANDARD =  1; 
                     const TIME_ZONE_ID_DAYLIGHT =  2;
Добавил: casperof

Используйте функцию SetBkMode().
Пример :

 
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               OldBkMode : integer; 
             begin 
               with Form1.Canvas do begin 
                 Brush.Color := clRed; 
                 FillRect(Rect(0, 0, 100, 100)); 
                 Brush.Color := clBlue; 
                 TextOut(10, 20, 'Not Transparent!'); 
                 OldBkMode := SetBkMode(Handle, TRANSPARENT); 
                 TextOut(10, 50, 'Transparent!'); 
                 SetBkMode(Handle, OldBkMode); 
               end; 
             end;
Добавил: casperof

Для этого необходимо вызвать несколько функций API. В приведеннном ниже примере проверяется версия shell32.dll. Функция возвращает значение True - если версия DLL больше или равна 4.71

 
             function TForm1.CheckShell32Version: Boolean; 
 
               procedure GetFileVersion(FileName: string; var Major1, Major2, 
                 Minor1, Minor2: Integer); 
               { Helper function to get the actual file version information } 
               var 
                 Info: Pointer; 
                 InfoSize: DWORD; 
                 FileInfo: PVSFixedFileInfo; 
                 FileInfoSize: DWORD; 
                 Tmp: DWORD; 
               begin 
                 // Get the size of the FileVersionInformatioin 
                 InfoSize := GetFileVersionInfoSize(PChar(FileName), Tmp); 
                 // If InfoSize = 0, then the file may not exist, or 
                 // it may not have file version information in it. 
                 if InfoSize = 0 then 
                   raise Exception.Create('Can''t get file version information for ' 
                     + FileName); 
                 // Allocate memory for the file version information 
                 GetMem(Info, InfoSize); 
                 try 
                   // Get the information 
                   GetFileVersionInfo(PChar(FileName), 0, InfoSize, Info); 
                   // Query the information for the version 
                   VerQueryValue(Info, '\', Pointer(FileInfo), FileInfoSize); 
                   // Now fill in the version information 
                   Major1 := FileInfo.dwFileVersionMS shr 16; 
                   Major2 := FileInfo.dwFileVersionMS and $FFFF; 
                   Minor1 := FileInfo.dwFileVersionLS shr 16; 
                   Minor2 := FileInfo.dwFileVersionLS and $FFFF; 
                 finally 
                   FreeMem(Info, FileInfoSize); 
                 end; 
               end; 
 
             var 
               tmpBuffer: PChar; 
               Shell32Path: string; 
               VersionMajor: Integer; 
               VersionMinor: Integer; 
               Blank: Integer; 
             begin 
               tmpBuffer := AllocMem(MAX_PATH); 
               // Get the shell32.dll path 
               try 
                 GetSystemDirectory(tmpBuffer, MAX_PATH); 
                 Shell32Path := tmpBuffer + '\shell32.dll'; 
               finally 
                 FreeMem(tmpBuffer); 
               end; 
 
               // Check to see if it exists 
               if FileExists(Shell32Path) then 
               begin 
                 // Get the file version 
                 GetFileVersion(Shell32Path, VersionMajor, VersionMinor, Blank, Blank); 
                 // Do something, such as require a certain version 
                 // (such as greater than 4.71) 
                 if (VersionMajor >= 4) and (VersionMinor >= 71) then 
                   Result := True 
                 else 
                   Result := False; 
               end 
               else 
                 Result := False; 
             end; 
 
Добавил: casperof

Нужно создать два bitmap'а: bitmap-маску ("AND" bitmap) и bitmap-картинку (XOR bitmap). Потом передать дескрипторы "AND" и "XOR" bitmap-ов API функции CreateIconIndirect()
Пример :

 
             procedure TForm1.Button1Click(Sender: TObject); 
             var 
               IconSizeX : integer; 
               IconSizeY : integer; 
               AndMask : TBitmap; 
               XOrMask : TBitmap; 
               IconInfo : TIconInfo; 
               Icon : TIcon; 
             begin 
              {Get the icon size} 
               IconSizeX := GetSystemMetrics(SM_CXICON); 
               IconSizeY := GetSystemMetrics(SM_CYICON); 
 
              {Create the "And" mask} 
               AndMask := TBitmap.Create; 
               AndMask.Monochrome := true; 
               AndMask.Width := IconSizeX; 
               AndMask.Height := IconSizeY; 
 
              {Draw on the "And" mask} 
               AndMask.Canvas.Brush.Color := clWhite; 
               AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY)); 
               AndMask.Canvas.Brush.Color := clBlack; 
               AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4); 
 
              {Draw as a test} 
               Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask); 
 
              {Create the "XOr" mask} 
               XOrMask := TBitmap.Create; 
               XOrMask.Width := IconSizeX; 
               XOrMask.Height := IconSizeY; 
 
              {Draw on the "XOr" mask} 
               XOrMask.Canvas.Brush.Color := ClBlack; 
               XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY)); 
               XOrMask.Canvas.Pen.Color := clRed; 
               XOrMask.Canvas.Brush.Color := clRed; 
               XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4); 
 
              {Draw as a test} 
               Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask); 
 
              {Create a icon} 
               Icon := TIcon.Create; 
               IconInfo.fIcon := true; 
               IconInfo.xHotspot := 0; 
               IconInfo.yHotspot := 0; 
               IconInfo.hbmMask := AndMask.Handle; 
               IconInfo.hbmColor := XOrMask.Handle; 
               Icon.Handle := CreateIconIndirect(IconInfo); 
 
              {Destroy the temporary bitmaps} 
               AndMask.Free; 
               XOrMask.Free; 
 
              {Draw as a test} 
               Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon); 
 
              {Assign the application icon} 
               Application.Icon := Icon; 
 
              {Force a repaint} 
               InvalidateRect(Application.Handle, nil, true); 
 
              {Free the icon} 
               Icon.Free; 
             end; 
Добавил: casperof

Наш опрос
Сколько вам лет
Всего ответов: 20
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск