Сайту требуются администраторы и авторы статей. С предложениями пишите на rock-n-roll@tut.by.
26 сентября 2007

Хранение настроек программы без INI-файлов и реестра

При хранении настроек программы в INI-файле или реестре довольно трудоемким является считывание этих данных и инициализация внутренних структур/классов, хранящих настройки. Не лучше ли хранить сами эти классы, а еще лучше - форму, которая содержит интерфейс управления настройками программы.

Далее »

Категория Интерфейс, Delphi | 0 CommentsВерсия для печати Версия для печати

18 сентября 2007

Delphi: Работа с ресурсами

Windows поддерживает такие виды ресурсов:

  • RT_ACCELERATOR Accelerator table
  • RT_ANICURSOR Animated cursor
  • RT_ANIICON Animated icon
  • RT_BITMAP Bitmap resource
  • RT_CURSOR Hardware-dependent cursor resource
  • RT_DIALOG Dialog box
  • RT_FONT Font resource
  • RT_FONTDIR Font directory resource
  • RT_GROUP_CURSOR Hardware-independent cursor resource
  • RT_GROUP_ICON Hardware-independent icon resource
  • RT_ICON Hardware-dependent icon resource
  • RT_MENU Menu resource
  • RT_MESSAGETABLE Message-table entry
  • RT_RCDATA Application-defined resource (raw data)
  • RT_STRING String-table entry
  • RT_VERSION Version resource

Самый простой из них это RT_STRING - то есть строковый. Для работы с ним предусмотрено специальное зарезервированное слово - resourcestring.

Далее »

Категория Работа с ресурсами, Delphi | 0 CommentsВерсия для печати Версия для печати

13 сентября 2007

Delphi: перетаскивание элементов ListBox

Если вы хотите принимать перетаскиваемый объект, только если он представляет собой собственный элемент, то в обработчике OnDragOver вставьте строчку "Accept := Source=Sender;". Ниже приведен код, позволяющий сортировать элементы с помощью перетаскивания их мышкой внутри списка компонента. Вам также понадобится таймер для обеспечения функции автопрокручивания. Это означает, что при перетаскивании элемента в верхнюю часть списка, он при необходимости прокручивается вниз, дабы стали видны невидимые в верхней части списка элементы. Если вам не нужно такое поведение компонента, исключите из кода все строчки, имеющие отношение к таймеру, включая вторую строчку в обработчике события OnDragOver.

//...
private
{ Private declarations }
GoingUp: Boolean;

procedure TForm1.ListBox1DragOver(Sender, Source: TObject;
X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := (Sender = Source) and
(TListBox(Sender).ItemAtPos(Point(X, Y), False) >= 0);
{устанавливаем таймер для автопрокрутки}
if Accept then
with Sender as TListBox do
if Y > Height - ItemHeight then
begin
GoingUp := False;
Timer1.Enabled := True;
end
else if Y > ItemHeight then
begin
GoingUp := True;
Timer1.Enabled := True;
end
else
Timer1.Enabled := False;
end;

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject;
X, Y: Integer);
var
NuPos: Integer;
begin
with Sender as TListBox do
begin
NuPos := ItemAtPos(Point(X, Y), False);
if NuPos >= Items.Count then
Dec(NuPos);
Label1.Caption := Format('Перемещено из %d в %d',
[ItemIndex, NuPos]);
Items.Move(ItemIndex, NuPos);
{выделяем перемещенный элемент}
ItemIndex := NuPos;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
with ListBox1 do
if GoingUp then
if TopIndex > 0 then
TopIndex := TopIndex - 1
else
Timer1.Enabled := False
else if TopIndex < Items.Count - 1 then
TopIndex := TopIndex + 1
else
Timer1.Enabled := False;
end;

procedure TForm1.ListBox1EndDrag(Sender, Target: TObject;
X, Y: Integer);
begin
Timer1.Enabled := False;
end;

Категория Интерфейс, Delphi | 0 CommentsВерсия для печати Версия для печати

13 сентября 2007

Delphi: делаем скриншот сайта

Данная функция позволяет сделать скриншот сайта с помощью IWebBrower

procedure generateJPEGfromBrowser(browser: iWebBrowser2; jpegFQFilename: String;
srcHeight: Integer; srcWidth: Integer; tarHeight: Integer; tarWidth: Integer);
var
sourceDrawRect : TRect;
targetDrawRect: TRect;
sourceBitmap: TBitmap;
targetBitmap: TBitmap;
jpeg: TJPEGImage;
viewObject: IViewObject;
begin
sourceBitmap := TBitmap.Create ;
targetBitmap := TBitmap.Create ;
jpeg := TJPEGImage.Create ;
try
try
sourceDrawRect := Rect(0,0, srcWidth , srcHeight );
sourceBitmap.Width :=  srcWidth ;
sourceBitmap.Height :=  srcHeight ;

viewObject := browser as IViewObject;

if viewObject = nil then
Exit;

OleCheck(viewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, self.Handle,
sourceBitmap.Canvas.Handle, @sourceDrawRect, nil, nil, 0));

// Resize Bitmap
targetDrawRect := Rect(0,0, tarWidth, tarHeight);
targetBitmap.Height := tarHeight;
targetBitmap.Width := tarWidth;
targetBitmap.Canvas.StretchDraw(targetDrawRect, sourceBitmap);

// Create JPEG from Bitmap and save it
jpeg.Assign(targetBitmap) ;
makeFileWriteable(jpegFQFilename);
jpeg.SaveToFile (jpegFQFilename);
finally
jpeg.free;
sourceBitmap.free ;
targetBitmap.free;
end;
except
// errors
end;
end;

Категория Интерфейс, Internet, Delphi | 0 CommentsВерсия для печати Версия для печати

Друзья

  • Рубрики

  • Разное
  • Прочее