Sites of the week

ads ads ads ads

Диалог выбора цвета (Delphi)

Posted by admin | Delphi, Интерфейс | Воскресенье 20 Май 2007 20:20

Открытие сокращённого или полного диалога выбора цвета

Вид диалога зависит от того, можно ли показать начальный цвет  (C : TColor) в сокращённом диалоге или нужно раскрывать его полностью.
Возвращает выбранный пользователем цвет.

Зависимости: Windows, Messages, SysUtils, Classes, DIALOGS;

 
function SelectColor(C: TColor): TColor;
const
BasicColors = [$00, $40, $80, $A0, $C0, $FF];
begin
with TColorDialog.Create(Application) do
begin
Color := C;
if (GetRValue(Color) in BasicColors) and
(GetGValue(Color) in BasicColors) and
(GetBValue(Color) in BasicColors) then
begin
Options := Options - [cdFullOpen];
end
else
begin
Options := Options + [cdFullOpen];
end;
if Execute then
begin
Result := Color
end
else
begin
Result := clNone;
end;
Free;
end;
end;

Копирование директории вместе с поддиректориями (Delphi)

Posted by admin | Delphi, Файловая система | Воскресенье 20 Май 2007 20:18

Фукция копирует СОДЕРЖИМОЕ директории SourceDir в директорию TargetDir.

Копируются все файлы, подкаталоги, и файлы находящиеся в этих подкаталогах.

Аргумент StopIfNotAllCopied: если значение этого аргумента = True,
то при первой же ошибке копирования файла или папки, работы функции прекратится а функуция вернёт False. В случае если этот аргумент = False, то ошибки копирования учитываться не будут.

Аргумент OverWriteFiles: если True, то существующие файлы будут переписаны.

Зависимости: SysUtils, FileCtrl, Windows

 
function FullDirectoryCopy(SourceDir, TargetDir: string; StopIfNotAllCopied,
OverWriteFiles: Boolean): Boolean;
var
SR: TSearchRec;
I: Integer;
begin
Result := False;
SourceDir := IncludeTrailingBackslash(SourceDir);
TargetDir := IncludeTrailingBackslash(TargetDir);
if not DirectoryExists(SourceDir) then
Exit;
if not ForceDirectories(TargetDir) then
Exit;
 
I := FindFirst(SourceDir + '*', faAnyFile, SR);
try
while I = 0 do
begin
if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
begin
if SR.Attr = faDirectory then
Result := FullDirectoryCopy(SourceDir + SR.Name, TargetDir + SR.NAME,
StopIfNotAllCopied, OverWriteFiles)
else if not (not OverWriteFiles and FileExists(TargetDir + SR.Name))
then
Result := CopyFile(Pchar(SourceDir + SR.Name), Pchar(TargetDir +
SR.Name), False)
else
Result := True;
if not Result and StopIfNotAllCopied then
exit;
end;
I := FindNext(SR);
end;
finally
SysUtils.FindClose(SR);
end;
end;

Пример использования:

Скопирует содержимое директории C:\ (не не саму директорию) в директорию D:\

 
FullDirectoryCopy('C:\', 'D:\');

ComboBox во Flash

Posted by admin | Flash, Компоненты | Воскресенье 20 Май 2007 20:01

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

Компонент ComboBox в среде Flash предоставляет разработчику набор пара­метров, перечисленных ниже:

Параметр

Описание

Change Handler Имя функции-обработчика события, происходящего при выборе пункта в списке или вводе в него значения (если это разрешено). Функция-обработчик должна быть объявлена в том же клипе, в котором находится элемент управления. Не обязателен. Задается в строковом виде
Data Массив строк, представляющий значения, привязанные к пунктам списка. Не обязателен
Editable Задает, может ли пользователь вводить в раскрывающийся список значение с клавиатуры. Пункт true разрешает ввод, пункт false запрещает. Значение по умолчанию - false
Labels Массив строк, представляющий названия пунктов списка
Row Count Количество пунктов, одновременно отображаемых в списке. Если количество пунктов в списке превышает это значение, появляется полоса прокрутки. Значение по умолчанию - 8

 

Раскрывающийся список Flash работает следующим образом. Для создания пунктов используются строки из массива Labels, в то время как массив Data хранится в памяти и нигде не показывается. Когда пользователь выбирает какой-либо пункт списка, элемент управления возвращает соответствующую ему строку из массива Data. Если массив Data не задан, возвращается название выбранного пункта (значение массива Label). Если пользова­тель вводит значение с клавиатуры, возвращается именно оно.

Для ввода массивов строк Flash предоставляет диалоговое окно Values. Чтобы вызвать его на экран, нажмите кнопку с изображением лупы в списке параметров редактора свойств.

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

 

 

Чтобы ввести в список новую строку, нажмите кнопку с изображением знака "плюс". В список будет добавлена новая строка. Щелкните по ней, и вместо нее появится небольшое поле ввода. Введите в него нужный текст и нажмите клавишу Enter.

 

Чтобы удалить строку, выделите ее и нажмите кнопку с изображением знака “минус".

 

Чтобы изменить строку, выделите ее. После этого вместо нее появится небольшое поле ввода, содержащее текст строки. Введите в него новый текст и нажмите клавишу <Enter> для его сохранения или клавишу Esc для возврата к старому тексту.

 

 

 

Введя массив строк, нажмите кнопку OК, чтобы сохранить его и закрыть окно Values. Если вы не хотите сохранять введенный массив, нажмите кнопку Cancel.

фактически элемент управления. соmboВох состоит из двух компонентов: собственно раскрывающегося списка и полосы прокрутки scrollBar. Поэтому, если вы удаляете соответствующий списку образец-клип из библиотеки, не забудьте удалить также и образец, представляющий полосу прокрутки.

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

Удалить директорию с поддиректориями (Delphi)

Posted by admin | Delphi, Файловая система | Воскресенье 20 Май 2007 19:58

В Delphi есть функция RemoveDir которая удаляет пустые директории. Но как быть, если директория содержит файлы и поддиректории?

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

Совместимость: Все версии Delphi

 
Function MyRemoveDir(sDir : String) : Boolean;
var
iIndex    : Integer;
SearchRec : TSearchRec;
sFileName : String;
begin
Result := False;
sDir   := sDir + '\*.*';
iIndex := FindFirst(sDir, faAnyFile, SearchRec);
 
while iIndex = 0 do begin
sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
if SearchRec.Attr = faDirectory then begin
if (SearchRec.Name &lt; &gt; '' )  and
(SearchRec.Name &lt; &gt; '.')  and
(SearchRec.Name &lt; &gt; '..') then
MyRemoveDir(sFileName);
end else begin
if SearchRec.Attr &lt; &gt; faArchive then
FileSetAttr(sFileName, faArchive);
if NOT DeleteFile(sFileName) then
ShowMessage('Could NOT delete ' + sFileName);
end;
iIndex := FindNext(SearchRec);
end;
 
FindClose(SearchRec);
 
RemoveDir(ExtractFileDir(sDir));
Result := True;
end;

Пример:

 
if NOT MyRemoveDir('D:\myDir') then
ShowMessage('Can NOT delete dir');

Заметка:

Cистемные, скрытые и read-only файлы тоже будут удалены.

Как сделать скриншот в Debian

Posted by admin | Debian, Unix | Воскресенье 20 Май 2007 19:55

Существует несколько способов сделать сриншот. Имеются следующие пакеты:

  • gkrellshoot - Plugin for gkrellm to lock the screen and make screenshots
  • ksnapshot - Screenshot application for KDE
  • xbase-clients - miscellaneous X clients

Если установлен ImageMagick, то можно набрать в консоли

[cc lang="bash"]

$ import -frame screenshot.png

Выбранные записи DBGrid

Posted by admin | Delphi, Базы данных, Контролы | Воскресенье 20 Май 2007 18:26

У DBGrid есть свойство SelectedRows : TBookMarkList;
TBookMarkList - объект , котоpый хpанит список боокмаpок.
Доступ к выбpаным стpокам чеpез этот объект , чеpез свойство Items, но Item'ы почему-то типа TBookMarkStr (String) , а не TBookMark (Pointer), почему так сделано я никак понять не могу. Для обхождения выбpанных стpок бежишь по списку и вызываешь Table1.GotoBookMark(Pointer(Grid.SelectedRows.Items ))

Получить цвет TColor в HTML-формате (Delphi)

Posted by admin | Delphi, Алгоритмы | Воскресенье 20 Май 2007 18:23

Представление TColor в HTML-формате

 
function gethtmlcolor(cl: tcolor; isbackcolor: boolean): string;
var rgbcolor: tcolorref;
begin
if isbackcolor then
result := 'bg'
else
result := '';
rgbcolor := colortorgb(cl);
result := result + 'color="#' +
format('%.2x%.2x%.2x',
[getrvalue(rgbcolor),
getgvalue(rgbcolor),
getbvalue(rgbcolor)]) + '"';
end;

Получить HTML из IWebBrowser (Delphi)

Posted by admin | ActiveX, Delphi, Internet | Воскресенье 20 Май 2007 18:20

В IE5, можно получить исходник используя свойство outerHTML тэгов HTML. В IE4 или IE3, Вам понадобится записать документ в файл, а затем загрузить файл в TMemo, TStrings, и т.д.

 
var
HTMLDocument: IHTMLDocument2;
PersistFile: IPersistFile;
begin
...
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
PersistFile.Save(StringToOleStr('test.htm'), True);
 
while HTMLDocument.readyState &lt;&gt; 'complete' do
Application.ProcessMessages;
...
end;

Обратите внимание: Вам понадобится импортировать библиотеку MSHTML и добавить MSHTML_TLB как ActiveX, в секцию Uses.

Запустить процесс и подождать пока он отработает (Delphi)

Posted by admin | Delphi, WinAPI | Воскресенье 20 Май 2007 18:19
 
procedure tform1.button1click(sender: tobject);
var si:startupinfo;
pi:process_information;
cmdline:string;
begin
zeromemory(@si,sizeof(si));
si.cb:=sizeof(si);
cmdline:='c:command.com';
if not createprocess( nil, // no module name (use command line).
pchar(cmdline), // command line.
nil, // process handle not inheritable.
nil, // thread handle not inheritable.
false, // set handle inheritance to false.
0, // no creation flags.
nil, // use parent's environment block.
nil, // use parent's starting directory.
si, // pointer to startupinfo structure.
pi ) // pointer to process_information structure.
then
begin
showmessage( 'createprocess failed.' );
exit;
end;
waitforsingleobject( pi.hprocess, infinite );
closehandle( pi.hprocess );
closehandle( pi.hthread );
showmessage('done !');
end;

Загрузка HTML в IWebBrowser (Delphi)

Posted by admin | ActiveX, Delphi, Internet, Интерфейс | Воскресенье 20 Май 2007 18:16
 
uses
ActiveX;
 
procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var
sl: TStringList;
ms: TMemoryStream;
begin
WebBrowser.Navigate('about:blank');
while WebBrowser.ReadyState &lt; READYSTATE_INTERACTIVE do
Application.ProcessMessages;
 
if Assigned(WebBrowser.Document) then
begin
sl := TStringList.Create;
try
ms := TMemoryStream.Create;
try
sl.Text := HTMLCode;
sl.SaveToStream(ms);
ms.Seek(0, 0);
(WebBrowser.Document as
IPersistStreamInit).Load(TStreamAdapter.Create(ms));
finally
ms.Free;
end;
finally
sl.Free;
end;
end;
end;
Страница 7 из 8«12345678»