Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 3

Автор: Chuvakstepan
Дата сообщения: 24.08.2007 17:12
skinash
А если уже известен Hadle окна приложения, который надо сделать активным? то как поступать?
Автор: vserd
Дата сообщения: 25.08.2007 14:35
lavren

Цитата:
Delphi5 стоит в каталоге C:\Borland\Delphi5. Shared файлы к нему в C:\Borland\Shared.
Delphi 2007 ставлю в каталог по умолчанию.
Кажысь все аккуратно делаю, а оно не пашет!

Настрой все пути так, чтобы версии не прересекались.

У самого нормально со существуют Delphi 4, Delphi 5, Delphi 7, Delphi Turbo explorer.
Автор: skinash
Дата сообщения: 25.08.2007 16:29
Chuvakstepan

Цитата:
А если уже известен Hadle окна приложения, который надо сделать активным? то как поступать?

Ну так сделай его активным!

Код: SetForegroundWindow(H);
Автор: Maks150988
Дата сообщения: 25.08.2007 18:26
Приветствую всех тут. Есть небольшая загвоздка. Использую Drag & Drop. Надыбал вот такой код:


Код:
.....
procedure WMDropFiles(hDrop: dword);
var
L, K : dword;
DragFile : PChar;
begin
GetMem(DragFile, MAX_PATH);
K := DragQueryFile(hDrop, $FFFFFFFF, nil, 0);
for L := 0 to K - 1 do
begin
DragQueryFile(hDrop, L, DragFile, MAX_PATH);
MessageBox(HWND, '', '', MB_OK or MB_ICONINFORMATION);
end;
FreeMem(DragFile);
end;
.....
WM_DROPFILES : begin
WMDropFiles(Wparam);
end;
.....
Автор: Glukodel
Дата сообщения: 25.08.2007 21:28
Maks150988

Цитата:
Что посоветуете?

посоветуем подробней описывать проблему... например, как именно хочется заюзать
Цитата:
Drag & Drop
и что дальше надо делать с файлом.....
Автор: antonn2
Дата сообщения: 25.08.2007 22:44
стиль WS_EX_ACCEPTFILES для принимающего контрола выставлен?


Код: procedure WMDropFiles(var Message: TWMDropFiles);
var aFile: array [0..255] of Char;
FilesCount,N : Integer;
begin
FilesCount := DragQueryFile(Message.drop, $FFFFFFFF, nil, 0);
begin
for N := 0 to FilesCount - 1 do begin
DragQueryFile(Message.drop, N, aFile, 256);
//aFile -
end;
end;
DragFinish(Message.Drop);
end;
Автор: Maks150988
Дата сообщения: 26.08.2007 11:14

Цитата:
WS_EX_ACCEPTFILES
Ну в диалоге выставлен.
Код такой:

Код:
type
TOpenFileName = packed record
lStructSize : DWORD;
hWndOwner : hWnd;
hInstance : HINST;
lpstrFilter : PAnsiChar;
lpstrCustomFilter : PAnsiChar;
nMaxCustFilter : DWORD;
nFilterIndex : DWORD;
lpstrFile : PAnsiChar;
nMaxFile : DWORD;
lpstrFileTitle : PAnsiChar;
nMaxFileTitle : DWORD;
lpstrInitialDir : PAnsiChar;
lpstrTitle : PAnsiChar;
Flags : DWORD;
nFileOffset : Word;
nFileExtension : Word;
lpstrDefExt : PAnsiChar;
lCustData : LPARAM;
lpfnHook : function(Wnd: hWnd; Msg: UINT; wParam: WPARAM; lParam: LPARAM): UINT stdcall;
lpTemplateName : PAnsiChar;
end;
...
function CharReplace(const Source: String; oldChar, newChar: Char): String;
var
i: Integer;
begin
Result := Source;
for i := 1 to Length(Result) do
if Result[i] = oldChar then
Result[i] := newChar
end;

function GetOpenFileNameA(var OpenFile: TOpenFileName): Bool; stdcall; external 'comdlg32.dll' name 'GetOpenFileNameA';
var
Inst, hWnd : Integer;
FileName : array[0..4095] of Char;
...
procedure SelectFile;
var
OpenFile : TOpenFileName;
StringTable_TitleOpen : String;
StringTable_FilterOpen : String;
begin
SetLength(StringTable_TitleOpen, 255);
LoadString(HInstance, 1655, PChar(StringTable_TitleOpen), 255);
SetLength(StringTable_FilterOpen, 255);
LoadString(HInstance, 1653, PChar(StringTable_FilterOpen), 255);
FillChar(OpenFile, SizeOf(TOpenFileName), 0);
with OpenFile do
begin
lStructSize := SizeOf(TOpenFileName);
hInstance := Inst;
hWndOwner := hWnd;
lpstrFilter := PChar(CharReplace(StringTable_FilterOpen, '|', #0));
nFilterIndex := 1;
nMaxFile := SizeOf(FileName);
lpstrTitle := PChar(StringTable_TitleOpen);
lpstrFile := FileName;
Flags := OFN_LONGNAMES or OFN_EXPLORER or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_HIDEREADONLY;
if GetOpenFileNameA(OpenFile) = true then
begin
SetDlgItemText(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_FILE_EDIT, lpstrFile);
GetDlgItemText(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_FILE_EDIT, FileName, 4096);
end;
end;
end;
Автор: Vetal83
Дата сообщения: 26.08.2007 19:27
Люди! кто шарит в делфи помогите с одним проектом потому-что я полный ноль в делфи.
Есть код на прогу Inno Setup 5.0.8 нужно как-то зарегестрировать один компонент (NewGroupBox) и чтоб инно его понимал в скриптах, этого нехватает для полной красоты инсталлятора.
Код с компонентом и небольшим описанием выложил сюда (538кб):
http://data.cod.ru/33245593034
а саму прогу можно скачать отсюда:
http://files.jrsoftware.org/is/5/

Заранее Благодарен!
Автор: SpoinT
Дата сообщения: 26.08.2007 23:23
Vetal83
Мужик, тебе в тему Inno Setup
Автор: Vetal83
Дата сообщения: 26.08.2007 23:28
SpoinT
Я темой не ошибся, это касается исходников на делфи.
Автор: delover
Дата сообщения: 27.08.2007 10:07
Vetal83
На Inno Setup пишутся скрипты для инсталляции. Это отдельный язык и есть несколько топиков для Inno Setup. Например:
Inno Setup 3 HELP
Можеш создать новый топик, но можеш просто продолжить тему там.
Компонент NewGroupBox находился в папке Inno\Components. Если там нет пакета то нужно создать пакет и зарегать компоненты, он там не единственный.
Автор: Glukodel
Дата сообщения: 27.08.2007 10:31
Vetal83

Цитата:
Есть код на прогу Inno Setup 5.0.8 нужно как-то зарегестрировать один компонент (NewGroupBox)

да уж, не сразу понятен смысл поста
как я понял: есть исходники Inno Setup, хочется их поковырять и добавить в них один компонен (NewGroupBox), причем так, что бы он понимался в его скриптах... Короче, задача не для новичка в делфи... Если уже есть хороший опыт программинга на чем-то другом, то можно пробовать делать и спрашивать здесь более конкретные вопросы по делфям...
А так - не маятся и разбиратся с дополнительными функциями Inno Setup, может он такую задачу без пересборки решает:
http://forum.ru-board.com/topic.cgi?forum=5&topic=23235&start=1600#lt
Автор: Vetal83
Дата сообщения: 27.08.2007 11:35
Glukodel

Цитата:
есть исходники Inno Setup, хочется их поковырять и добавить в них один компонен (NewGroupBox), причем так, что бы он понимался в его скриптах...

Именно это и надо

Цитата:
может он такую задачу без пересборки решает:

Нет такую задачу он не решает, что очень жаль.
Автор: delover
Дата сообщения: 27.08.2007 12:25
Vetal83
Да, нашёл Inno Setup, там нет этого компонента. Очень жаль, но Вам придётся решать эту задачу самостоятельно. Сделайте поиск по строке
RegisterProperty('
Остальное нужно делать аналогичным образом.
Автор: Vetal83
Дата сообщения: 27.08.2007 13:55
delover
Спасибо за подсказку! попробую и отпишусь.

Добавлено:
delover
ОГРОМНОЕ СПАСИБО! Получилось!
Автор: Grafus
Дата сообщения: 28.08.2007 15:00
Народ, а как определить/найти папку, с профайлами, пользователя под которым запускается приложение???
Например: C:\Documents and Settings\Administrator или C:\Documents and Settings\Pupkin
Автор: skinash
Дата сообщения: 28.08.2007 15:30
Grafus
Вот пример, как Получить пути специальных папок:
[more]
Код: {
Constants:

CSIDL_DESKTOP
CSIDL_INTERNET
CSIDL_PROGRAMS
CSIDL_CONTROLS
CSIDL_PRINTERS
CSIDL_PERSONAL
CSIDL_FAVORITES
CSIDL_STARTUP
CSIDL_RECENT
CSIDL_SENDTO
CSIDL_BITBUCKET
CSIDL_STARTMENU
CSIDL_DESKTOPDIRECTORY
CSIDL_DRIVES
CSIDL_NETWORK
CSIDL_NETHOOD
CSIDL_FONTS
CSIDL_TEMPLATES
CSIDL_COMMON_STARTMENU
CSIDL_COMMON_PROGRAMS
CSIDL_COMMON_STARTUP
CSIDL_COMMON_DESKTOPDIRECTORY
CSIDL_APPDATA
CSIDL_PRINTHOOD
CSIDL_ALTSTARTUP
CSIDL_COMMON_ALTSTARTUP
CSIDL_COMMON_FAVORITES
CSIDL_INTERNET_CACHE
CSIDL_COOKIES
CSIDL_HISTORY
}

uses
ActiveX, ShlObj;

procedure TForm1.Button1Click(Sender: TObject);
// Replace CSIDL_HISTORY with the constants above
var
Allocator: IMalloc;
SpecialDir: PItemIdList;
FBuf: array[0..MAX_PATH] of Char;
PerDir: string;
begin
if SHGetMalloc(Allocator) = NOERROR then
begin
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_HISTORY, SpecialDir);
SHGetPathFromIDList(SpecialDir, @FBuf[0]);
Allocator.Free(SpecialDir);
ShowMessage(string(FBuf));
end;
end;

// With Windows Me/2000, the SHGetSpecialFolderLocation function
// is superseded by ShGetFolderLocation.


// function to get the desktop folder location:

function GetDeskTopPath : string;
var
shellMalloc: IMalloc;
ppidl: PItemIdList;
PerDir: string;
begin
ppidl := nil;
try
if SHGetMalloc(shellMalloc) = NOERROR then
begin
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, ppidl);
SetLength(Result, MAX_PATH);
if not SHGetPathFromIDList(ppidl, PChar(Result)) then
raise exception.create('SHGetPathFromIDList failed : invalid pidl');
SetLength(Result, lStrLen(PChar(Result)));
end;
finally
if ppidl <> nil then
shellMalloc.free(ppidl);
end;
end;
Автор: Vetal83
Дата сообщения: 28.08.2007 22:30
Подскажите как при нажатии на TButton свернуть форму в панель задач если форма имеет значение BorderStyle:=bsNone; ?
Автор: Browin
Дата сообщения: 28.08.2007 23:52
Нужно стартануть и стопануть драйвер и службу.
Командами это делается так:

net stop sss
net start sss

net stop "Big sss"
net start "Big sss"

Использую код со страницы http://www.delphiworld.narod.ru/base/run_or_start_service.html

Если в первом случае с драйвером sss все нормально, то вот с "Big sss" проблемы, т.е. прога полагает, что типа не установлена такая служба.

Как быть?


Добавлено:
Догадался сам.
Просто есть Выводимое имя и Имя службы. И я их попутал.
Автор: antonn2
Дата сообщения: 29.08.2007 00:21
Vetal83
Application.Minimize;
Автор: Maks150988
Дата сообщения: 29.08.2007 00:57
Народ, подскажите как использовать прогресс на винапи. То есть нужно создать процедуру и прогнать шкалу прогресса один раз. Элементы диалога желательно грузить из ресурсов, а не создавать в процессе работы.
Автор: skinash
Дата сообщения: 29.08.2007 08:08
Maks150988
Вот так пойдёт?[more]
Код: {
Use this ProgressBar when you do not know the amount of progress toward
completion but wish to indicate that progress is being made.

This ProgressBar works only on Windows XP and the ComCtl32.dll version
6.00 or later is needed. To use the new ComCtrl you have to provide the manifest.
In Delphi 7 just drop TXPManifest on the form. For prior versions of Delphi
you have to include the XP manifest resource.
}


unit MarqueeProgressBar;

interface

uses
SysUtils, Windows, Classes, Controls, ComCtrls, Messages;

type
TMarqueeProgressBar = class(TProgressBar)
private
FActive: Boolean;
FAnimationSpeed: Integer;
procedure SetActive(const Value: Boolean);
procedure SetAnimationSpeed(const Value: Integer);
procedure UpdateProgressBar;
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
published
property Active: Boolean read FActive write SetActive;
property AnimationSpeed: Integer read FAnimationSpeed write SetAnimationSpeed;
end;

const
PBS_MARQUEE = $08;
PBM_SETMARQUEE = WM_USER + 10;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('SwissDelphiCenter', [TMarqueeProgressBar]);
end;

constructor TMarqueeProgressBar.Create(AOwner: TComponent);
begin
inherited;
FAnimationSpeed := 60;
end;

procedure TMarqueeProgressBar.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.Style := Params.Style or PBS_MARQUEE;
end;

procedure TMarqueeProgressBar.SetActive(const Value: Boolean);
begin
FActive := Value;
UpdateProgressBar;
end;

procedure TMarqueeProgressBar.SetAnimationSpeed(const Value: Integer);
begin
FAnimationSpeed := Value;
UpdateProgressBar;
end;

procedure TMarqueeProgressBar.UpdateProgressBar;
begin
if FActive then
SendMessage(Self.Handle, PBM_SETMARQUEE, 1, FAnimationSpeed)
else
SendMessage(Self.Handle, PBM_SETMARQUEE, 0, 0);
end;

end.
Автор: SERGE_BLIZNUK
Дата сообщения: 29.08.2007 19:05
Люди добрые, поможите примером кода или ссылкой на оный.

стоит задача - есть RTF документ (с достаточно хитрыми таблицами, поэтому всякие TRichEdit (TJvxRichEdit, fastReport'ий TfrRichObject) его показывают, но криво...
а WinWord его показывает замечательно!
Нужно этот документ распечатать (получается, что через Word), но так, чтобы Word пользователю глаза мозолил как можно меньше (а в идеале, вообще был невидымым...)

Пример "замороченного" rtf-файла я могу выложить, если это поможет кому-то подсказать мне решение...
Автор: iTASmania_Inc
Дата сообщения: 29.08.2007 21:45
Блин, даже стыдно спрашивать (только не смейтесь), да и вопрос несколько отвлечён от темы: объясните, пожалуйста, как нубу, есть ли существенная разница между Delphi 7 и Delphi 2007, какой из этих вариантов, на Ваш взгляд, более подходит для изучения Delphi c нуля?
Автор: Saxonika
Дата сообщения: 29.08.2007 22:21
Если с ноля, то не морочь себе голову - бери сразу на Delphi 2007.
Никого не слушай, потом будет сложно перейти:
будешь тысячу раз взвешивать все "за" и "против".
А так: выбрал и забыл.

К тому же, разница весьма условна: Total Commander написан на Делфи 2 и по сей день.
Автор: iTASmania_Inc
Дата сообщения: 29.08.2007 22:28
Saxonika
А где взять полную можно? Кроме оффсайта, осла и торрента? А то соответствующую ветку закрыли в Варезнике. Посоветовали Lite-версию, но в ней нету (или не читается) справки, а так всё вроде нормально. Оставить можно?
Автор: antonn2
Дата сообщения: 29.08.2007 22:54
Delphi 7 позволяет без проблем создавать win32 приложения, и потом при распространении программы не предупреждать пользователей "для запуска программы необходим NET Фраемворк версии 2.0" Меньше весит, быстрей ставится, быстрей работает. в 2007 понапихано слишком много, хотели сделать ее универсальной.
Автор: Maks150988
Дата сообщения: 29.08.2007 23:05
skinash
Объясни подробнее как использовать. Я не понял толком. Зачит:
Файл ресурса:

Код:
101 DIALOGEX 0, 0, 140, 25
STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_ACCEPTFILES
CAPTION "Win32 Rebuilder"
MENU 101
LANGUAGE LANG_RUSSIAN, 0x1
FONT 8, "MS Shell Dlg"
{
CONTROL "", 7001, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE, 5, 7, 100, 12 , 0x00020000
CONTROL "", 7005, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 110, 6, 25, 14
}
Автор: RomanTim
Дата сообщения: 30.08.2007 07:10
antonn2
А при чем тут .NET? В 2007 пока только Win32 доступно (что в делфи, что в C++, .NET может как-то и можно включить, но я не видел), а вот среда разработки, IMHO, ощутимо удобнее и функциональнее (да, тяжелее, но и железо со времен Д7 пошустрее стало).
К тому же, в силу того, что Д7 выпущена уже весьма давно, даже в ХР (а висту уже, видимо, тоже надо начинать учитывать) некоторые контролы могут так "оригинально" себя вести, что довольно много времени уходит на придумывание как обойти эти глюки.

iTASmania_Inc
Так что Saxonika прав - если нет багажа имеющихся проектов, и не совсем антикварный комп, бери 2007.
По поводу где - глянь здесь
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=466273
Автор: iTASmania_Inc
Дата сообщения: 30.08.2007 07:55
Saxonika
antonn2
RomanTim
Спасибо за советы!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.