Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Часто задаваемые вопросы по программированию в Delphi 23.09.02


Информационный Канал Subscribe.Ru


Частые вопросы по программированию в Delphi

 ВОПРОСЫ:

1. Как быстро выводить графику ?

Пример заполнения формами точками случайного цвета.

  type
    TRGB=record
      b,g,r:byte;
    end;
    ARGB=array [0..1] of TRGB;
    PARGB=^ARGB;

  var
    b:TBitMap;

  procedure TForm1.FormCreate(sender:TObject);
  begin
    b:=TBitMap.Create;
    b.pixelformat:=pf24bit;
    b.width:=Clientwidth;
    b.height:=Clientheight;
  end;

  procedure TForm1.Tim1OnTimer(sender:TObject);
  Var
    p:PARGB;
    x,y:integer;
  begin
    for y:=0 to b.height-1 do
    begin
      p:=b.scanline[y];
      for x:=0 to b.width-1 do
      begin
        p[x].r:=random(256);
        p[x].g:=random(256);
        p[x].b:=random(256);
      end;
    end;
    canvas.draw(0,0,b);
  end;

  procedure TForm1.FormDestroy(sender:TObject);
  begin
    b.free;
  end;

2. Как определить информацию о памяти (ОЗУ) ?

Function GetRAMSize:integer;
var MS : TMemoryStatus;
Begin
 GlobalMemoryStatus(MS);
 Result := MS.dwTotalPhys;
end;

Функция возвращает размер ОЗУ в байтах.

В общем функция GlobalMemoryStatus заполняет структуру типа TMemoryStatus, которая имеет ряд достаточно полезных полей:
dwTotalPhys - Полный объем ОЗУ (т.е. физической памяти)
dwAvailPhys - Свободный объем ОЗУ (как правило небольшая величина)
dwTotalVirtual - Полный объем виртуальной памяти
dwAvailVirtual - Свободный объем виртуальной памяти
dwMemoryLoad - Процент использования памяти (0-не используется, 100-используется вся)
dwTotalPageFile - Общий размер данных (в байтах), которые могут быть сохранены в файле подкачки (но это не является его размером на диске !!)
dwAvailPageFile - Доступный объем в файле подкачки

3. Как провести регистрацию программ в меню "Пуск" Windows 95/98/NT ?

Function TForm2.ProgmanCommand(Command:string):boolean;
var
 macrocmd:array[0..88] of char;
begin
 DDEClient.SetLink('PROGMAN','PROGMAN');
 DDEClient.OpenLink; { Устанавливаем связь по DDE }
 strPCopy(macrocmd,'['+Command+']'); { Подготавливаем ASCIIZ строку }
 ProgmanCommand :=DDEClient.ExecuteMacro(MacroCmd,false);
 DDEClient.CloseLink; { Закрываем связь по DDE }
end;

При вызове ProgmanCommand возвращает true, если посылка макроса была успешна. Система команд (основных) приведена ниже:

Create(Имя группы, путь к GRP файлу) - Создать группу с именем "Имя группы", причем в нем могут быть пробелы и знаки препинания. Путь к GRP файлу можно не указывать, тогда он создастся в каталоге Windows.
Delete(Имя группы) - Удалить группу с именем "Имя группы"
ShowGroup(Имя группы, состояние) - Показать группу в окне, причем состояние - число, определяющее параметры окна: 1-нормальное состояние + активация; 2-миним.+ активация; 3-макс. + активация; 4-нормальное состояние; 5-Активация
AddItem(командная строка, имя раздела, путь к иконке, индекс иконки (с 0), Xpos,Ypos, рабочий каталог, HotKey, Mimimize) - Добавить раздел к активной группе. В командной строке, имени размера и путях допустимы пробелы, Xpos и Ypos - координаты иконки в окне, лучше их не задавать, тогда PROGMAN использует значения по умолчанию для свободного места. HotKey - виртуальный код горячей клавиши. Mimimize - тип запуска, 0-в обычном окне, 0 - в минимизированном.
DeleteItem(имя раздела) - Удалить раздел с указанным именем в активной группе
Пример использования:

 ProgmanCommand('CreateGroup(Комплекс программ для каталогизации литературы,)');
 ProgmanCommand('AddItem('+path+'vbase.hlp,Справка по VBase,'+ path +
                ' vbase.hlp, 0, , , '+ path + ',,)');

где path - строка типа String, содержащая полный путь к каталогу 'C:\Catalog\'

4. Как создать PolyPolygon используя массив точек ?

Polygon - метод компонента TCanvas получает в качестве параметра динамический массив точек. Функция PolyPolygon() из Windows GDI получает указатель на массив точек.
Пример:

procedure TForm1.Button1Click(Sender: TObject);
var
    ptArray : array[0..9] of TPOINT;
    PtCounts : array[0..1] of integer;
begin
    PtArray[0] := Point(0, 0);
    PtArray[1] := Point(0, 100);
    PtArray[2] := Point(100, 100);
    PtArray[3] := Point(100, 0);
    PtArray[4] := Point(0, 0);
    PtCounts[0] := 5;
    PtArray[5] := Point(25, 25);
    PtArray[6] := Point(25, 75);
    PtArray[7] := Point(75, 75);
    PtArray[8] := Point(75, 25);
    PtArray[9] := Point(25, 25);
    PtCounts[1] := 5;
    PolyPolygon(Form1.Canvas.Handle,
    PtArray,PtCounts,2);
end;

5. Как сделать непрямоугольную форму ?

function BitmapToRegion(Bitmap:TBitMap;TransColor:Tcolor):HRGN;
var X,Y:integer;
    XStart:integer;
begin
 result:=0;
 with Bitmap do
  for Y:=0 to Height-1 do
   begin
    x:=0;
    while X<Width do
     begin
      while (X<Width) and (Canvas.Pixels[X,Y]=TransColor) do
      inc(X);
      if X>=Width then Brear;
      XStart:=X;
      while (X<Width) and (Canvas.Pixels[X,Y]<>TransColor) do inc(X);
      if Result=0
       then Result:=CreateRectRgn(XStart,Y,X,Y+1)
       else CombineRgn(Result,Result,CreateRectRgn(XStart,Y,X,Y+1),RGN_OR);
     end;
   end;
end;

 КРАТКОЕ СОДЕРЖАНИЕ СТАТЕЙ:

Написание компонент 

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

 КОМПОНЕНТЫ:

CoolControls v2.05 

...Новая версия известной библиотеки теперь включает в себя 3 новых компонента, а также улучшенные старые. Новые компоненты позволят создавать еще более совешенные приложения чем раньше. Сегодня библиотека CoolControls 2.05 насчитывает более 45 классов. Пакет поставляется с исходными текстами. За дополнительной информацией обращайтесь на http://www.cooldev.com...

Вопросы по программированию в Delphi - www.mydelphi.hoha.ru

С уважением, Сергей
mydelphi@hoha.ru
Здесь может быть и Ваш баннер тоже

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное