Привествую. Хочу добавить на диалог прогресс ну так чисто для понтов в приложении и необходимо при нажатии на кнопку прогнать шкалу 1 раз до 100% и затем чтобы шкала очистилилась - ну чтобы типа все было готово к следующим действиям с прогрессом. Пожскажите что надо в SendMessage послать.
» Вопросы по Delphi (все версии) - часть 3
Maks150988, в какой диалог?
Jokerjar79
Ну в диалог своей программы.
Ну в диалог своей программы.
Проблема с запуском EXE с параметрами
1. Параметры считываются с Edit'ов формы
2. Все параметры считываются в статус-бар формы
3. Надо открыть exe с этими параметрами, но говорит что-то вроде nocompactible
Код: StatusBar1.Panels[0].Text :='"1.exe" ' + 'a ' + filez.text + ' ' + ZIP
+ where.text;
procedure TForm1.goButClick(Sender: TObject);
begin
WinExec (StatusBar1.Panels[0].Text, sw_show);
Application.Terminate;
end;
1. Параметры считываются с Edit'ов формы
2. Все параметры считываются в статус-бар формы
3. Надо открыть exe с этими параметрами, но говорит что-то вроде nocompactible
Код: StatusBar1.Panels[0].Text :='"1.exe" ' + 'a ' + filez.text + ' ' + ZIP
+ where.text;
procedure TForm1.goButClick(Sender: TObject);
begin
WinExec (StatusBar1.Panels[0].Text, sw_show);
Application.Terminate;
end;
OdesitVadim
Спасибо за помощь, применил другую компоненту и все заработало.
Спасибо за помощь, применил другую компоненту и все заработало.
Короче делаю так:
Код:
SetWindowLong(GetDlgItem(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_PROGRESS), GWL_STYLE, GetWindowLong(GetDlgItem(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_PROGRESS), GWL_STYLE) or PBS_MARQUEE);
SendMessage(GetDlgItem(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_PROGRESS), PBS_MARQUEE, WPARAM(True), 40);
Код:
SetWindowLong(GetDlgItem(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_PROGRESS), GWL_STYLE, GetWindowLong(GetDlgItem(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_PROGRESS), GWL_STYLE) or PBS_MARQUEE);
SendMessage(GetDlgItem(FindWindow(nil, HWND_MAIN_DIALOG), MAIN_PROGRESS), PBS_MARQUEE, WPARAM(True), 40);
Вопрос на засыпку - есть ли для CodeGear RAD Studio Delphi 2007 аналог DDevExtension, т.е. прога, которая позволяет вернуть Палитру компонентов на ее место как в предыдущих версиях Delphi (3-7)? А то версии DDevExtension 1.3 и 1.4 beta совместимы только с Delphi 2006.
Добавлено:
Сорри. Нашел сам новую бетку DDevExtension на http://andy.jgknet.de/dspeedup/builds/
Добавлено:
Сорри. Нашел сам новую бетку DDevExtension на http://andy.jgknet.de/dspeedup/builds/
Chuvakstepan
Код:
procedure TForm1.goButClick(Sender: TObject);
begin
WinExec (PChar(StatusBar1.Panels[0].Text), sw_show);
Application.Terminate;
end;
Код:
procedure TForm1.goButClick(Sender: TObject);
begin
WinExec (PChar(StatusBar1.Panels[0].Text), sw_show);
Application.Terminate;
end;
makbeth
Большое спасибо за помощь, теперь работает
Большое спасибо за помощь, теперь работает
Почему не обрабатывается событие KeyDown? В форме установил свойство KeyPreview в true, написал код для события KeyDown, но событие не происходит, не ловится, что ли. Нужно отловить нажатие клавиши Esc.
Скажите, как физически реализуется, с применением каких "хитростей", такая задача: есть форма с двумя кнопками: Cancel и Ok. Также можно нажать две соответственные клавиши: Esc и Enter. Вопрос в том, как присоединить один обработчик и клавише на клавиатуре, и кнопке на форме?
DmitryKz
я не очень большой спец, но, как мне кажется, TActionList (с закладки Стандартные)
это именно то, что нужно.
кидаешь его, туда вбиваешь два Action - назначаешь им горячую клавишу, Caption и код обработки на onExecute
потом назначаешь кнопке нужный Action
я не очень большой спец, но, как мне кажется, TActionList (с закладки Стандартные)
это именно то, что нужно.
кидаешь его, туда вбиваешь два Action - назначаешь им горячую клавишу, Caption и код обработки на onExecute
потом назначаешь кнопке нужный Action
DmitryKz
Обработай OnKeyPress.(На предпоследний пост от DmitryKz)
Сори, ошибся.
Обработай OnKeyPress.(На предпоследний пост от DmitryKz)
Сори, ошибся.
SERGE_BLIZNUK
Если бы все было так просто я тоже не спец, вот у меня в голове и раздирают противоречия: горячие клавиши для Экшена не подходят, потому как Esc и Enter среди них нет. Для обработки нажатия этих клавиш надо использовать события KeyDown или KeyUp (to ymg2000: а не KeyPress, потому как последний распознает символьные, а не функциональные клавиши). По отдельности написать обработчики труда не составляет, но я не понимаю, как сделать один обработчик и на функциональную клавишу, и на кнопку на форме. Чувствую, что чего не понимаю
Если бы все было так просто я тоже не спец, вот у меня в голове и раздирают противоречия: горячие клавиши для Экшена не подходят, потому как Esc и Enter среди них нет. Для обработки нажатия этих клавиш надо использовать события KeyDown или KeyUp (to ymg2000: а не KeyPress, потому как последний распознает символьные, а не функциональные клавиши). По отдельности написать обработчики труда не составляет, но я не понимаю, как сделать один обработчик и на функциональную клавишу, и на кнопку на форме. Чувствую, что чего не понимаю
DmitryKz
Я тоже не вижу, как это можно сделать. Это ведь два разных события - от клавы и от мыши. Даже если их перехватывать на более низком уровне, все равно нужно перехватывать и клаву и мышь. А зачем тебе так изощряться (все в одном обработчике)?
Я тоже не вижу, как это можно сделать. Это ведь два разных события - от клавы и от мыши. Даже если их перехватывать на более низком уровне, все равно нужно перехватывать и клаву и мышь. А зачем тебе так изощряться (все в одном обработчике)?
DmitryKz
помнится, я делал вот так:
один и тот же обработчик вешается на keydown формы и на onclick кнопки, а внутри смотришь на tag sender'a ну и в зависимости от него...
не знаю насчёт красоты решения (я тоже совсем не великий vcl-спец), но работало...
---------
отмазка:
если меня совсем переклинило, то прошу не очень больно...
ещё с работы не ушёл...
помнится, я делал вот так:
один и тот же обработчик вешается на keydown формы и на onclick кнопки, а внутри смотришь на tag sender'a ну и в зависимости от него...
не знаю насчёт красоты решения (я тоже совсем не великий vcl-спец), но работало...
---------
отмазка:
если меня совсем переклинило, то прошу не очень больно...
ещё с работы не ушёл...
akaGM
В данном случае так не получится, т.к. OnKeyDown и OnClick разнотипные обработчики.
Что-бы сделать один обработчик и на Кей и на мышь, можно, наверное, перекрыть соответствующие динамические методы сообщений что-то наподобие:
procedure TMyForm.WMKeyDown(var Msg: TWMKeyDown); {override}
begin
............
if Assigned(FMyNewEvent) then
FMyNewEvent(Self);
end;
// Можно также вместо WMKeyDown перекрыть виртуальный KeyDown
В published
property MyNewEvent: TNotifyEvent read... write...;
Теперь для клавы и для мыши есть однотипные обработчики (для мыши ну и Enter - OnClick) и, значит можно воспользоваться советом akaGM.
В данном случае так не получится, т.к. OnKeyDown и OnClick разнотипные обработчики.
Что-бы сделать один обработчик и на Кей и на мышь, можно, наверное, перекрыть соответствующие динамические методы сообщений что-то наподобие:
procedure TMyForm.WMKeyDown(var Msg: TWMKeyDown); {override}
begin
............
if Assigned(FMyNewEvent) then
FMyNewEvent(Self);
end;
// Можно также вместо WMKeyDown перекрыть виртуальный KeyDown
В published
property MyNewEvent: TNotifyEvent read... write...;
Теперь для клавы и для мыши есть однотипные обработчики (для мыши ну и Enter - OnClick) и, значит можно воспользоваться советом akaGM.
А может все намного проще:
Цитата:
Цитата:
Цитата:
TBitBtn.Cancel Property
Determines whether the button's OnClick event handler executes when the Escape key is pressed.
Pascal
property Cancel: Boolean;
Description
If Cancel is true, the button's OnClick event handler executes when the user presses Esc. Although an application can have more than one Cancel button, the form calls the OnClick event handler only for the first visible button in the tab order.
Цитата:
TBitBtn.Default Property
Determines whether the button's OnClick event handler executes when the Enter key is pressed.
Pascal
property Default: Boolean;
Description
If Default is true, the button's OnClick event handler executes when the user presses Enter.
Although an application can have more than one Default button, the form calls the OnClick event handler only for the first visible button in the tab order. Moreover, any button that has focus becomes the Default button temporarily; hence, if the user selects another button before pressing Enter, the selected button's OnClick event handler executes instead.
DmitryKz
Для обработки ESC и ENTER OnKeyPress хватает полностью: Key = #27 и #13 соответственно
Для обработки ESC и ENTER OnKeyPress хватает полностью: Key = #27 и #13 соответственно
RomanTim
А что, мое решение не подходит? "Все уже сделано до нас".
Вроде как обрабатываются те же клавиши.
На кнопку Cancel ставишь Cancel Property в true и
на кнопку Ok ставишь Default Property в true
Все работает. При этом кнопка Ok еще и обрамляется рамкой.
А что, мое решение не подходит? "Все уже сделано до нас".
Вроде как обрабатываются те же клавиши.
На кнопку Cancel ставишь Cancel Property в true и
на кнопку Ok ставишь Default Property в true
Все работает. При этом кнопка Ok еще и обрамляется рамкой.
AntonVA1
Спасибо за подсказку, кажется это то, что надо!
Добавлено:
Как обозначается путь к рабочему столу в свойстве path компонента shelltreeview? Я знаю, что по умолчанию вершина и будет рабочим столом, но вот нужно иногда программно это задать?
Спасибо за подсказку, кажется это то, что надо!
Добавлено:
Как обозначается путь к рабочему столу в свойстве path компонента shelltreeview? Я знаю, что по умолчанию вершина и будет рабочим столом, но вот нужно иногда программно это задать?
Блин все интересует впихивание картинки и надписи на кнопку средствами Вин Апи. Ну может быть кто-нибудь знает как сие чудо сотворить или подскажите сайты любителей выкладывания исходничков где есть эта направленность.
AntonVA1
В большинстве ситуаций действительно подходит, сам так всегда делаю, за исключением одного момента - если на модальной форме есть TMemo и фокус на ней, то Esc не приводит к срабатыванию кнопки с Cancel=True
А знать то, что Enter и Esc можно в OnKeyPress обработать, имхо, не помешает
В большинстве ситуаций действительно подходит, сам так всегда делаю, за исключением одного момента - если на модальной форме есть TMemo и фокус на ней, то Esc не приводит к срабатыванию кнопки с Cancel=True
А знать то, что Enter и Esc можно в OnKeyPress обработать, имхо, не помешает
Maks150988
Цитата:
http://delphimaster.ru/cgi-bin/forum.pl?n=5
http://delphikingdom.ru/table/page.asp
Цитата:
подскажите сайты любителей выкладывания исходничков
http://delphimaster.ru/cgi-bin/forum.pl?n=5
http://delphikingdom.ru/table/page.asp
Maks150988
Исходники VCL, модуль buttons.pas - вот хороший исходничек по этой теме.
Исходники VCL, модуль buttons.pas - вот хороший исходничек по этой теме.
Скажите, как сделать так, чтобы если в компонент Image не загружено никакое изображение, настраивать цвет фона, той области, где должно быть изображение?
ymg2000
Цитата:
полностью согласен...
забыл, что делал их для однотипных обработчиков,
но однотипных лишь по числу/типу параметров...
Цитата:
В данном случае так не получится, т.к. OnKeyDown и OnClick разнотипные обработчики.
полностью согласен...
забыл, что делал их для однотипных обработчиков,
но однотипных лишь по числу/типу параметров...
MrZeRo
Да я хз знает что там. Слишком сложновато разбирать...
Кстати помогите приспособить вот такой код всплывающих подсказок:
Код:
const
TTS_BALLOON = $40;
var
hTooltip : Cardinal;
ti : TToolInfo;
procedure ShowHelpText(wParam: WPARAM; lParam: LPARAM; hSB: HWND);
var
bla : array of integer;
begin
if BOOL(HIWORD(wParam) and MF_POPUP) or BOOL(HIWORD(wParam) and MF_SEPARATOR) or (HIWORD(wParam) = $FFFF)
then
SendMessage(hSB, SB_SIMPLE, 0, 0)
else
MenuHelp(WM_MENUSELECT, wParam, lParam, HMENU(lParam), hInstance, hSB, @bla);
end;
procedure CreateToolTips(hWnd: Cardinal);
begin
hToolTip := CreateWindowEx(0, 'Tooltips_Class32', nil, TTS_ALWAYSTIP, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), hWnd, 0, hInstance, nil);
if hToolTip <> 0 then
begin
SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
ti.cbSize := SizeOf(TToolInfo);
ti.uFlags := TTF_SUBCLASS;
ti.hInst := hInstance;
end;
end;
procedure AddToolHint(hwnd, id: Cardinal; lpti: PToolInfo; lpText: PChar);
var
Item : THandle;
Rect : TRect;
begin
Item := GetDlgItem(hWnd, id);
if (Item <> 0) AND (GetClientRect(Item, Rect)) then
begin
lpti.hwnd := Item;
lpti.Rect := Rect;
lpti.lpszText := lpText;
SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(lpti));
end;
end;
.....
// в WM_INITDIALOG суем
CreateToolTips(hwnd);
AddToolHint(hwnd, HandleButton, @ti, 'Text');
Да я хз знает что там. Слишком сложновато разбирать...
Кстати помогите приспособить вот такой код всплывающих подсказок:
Код:
const
TTS_BALLOON = $40;
var
hTooltip : Cardinal;
ti : TToolInfo;
procedure ShowHelpText(wParam: WPARAM; lParam: LPARAM; hSB: HWND);
var
bla : array of integer;
begin
if BOOL(HIWORD(wParam) and MF_POPUP) or BOOL(HIWORD(wParam) and MF_SEPARATOR) or (HIWORD(wParam) = $FFFF)
then
SendMessage(hSB, SB_SIMPLE, 0, 0)
else
MenuHelp(WM_MENUSELECT, wParam, lParam, HMENU(lParam), hInstance, hSB, @bla);
end;
procedure CreateToolTips(hWnd: Cardinal);
begin
hToolTip := CreateWindowEx(0, 'Tooltips_Class32', nil, TTS_ALWAYSTIP, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), hWnd, 0, hInstance, nil);
if hToolTip <> 0 then
begin
SetWindowPos(hToolTip, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
ti.cbSize := SizeOf(TToolInfo);
ti.uFlags := TTF_SUBCLASS;
ti.hInst := hInstance;
end;
end;
procedure AddToolHint(hwnd, id: Cardinal; lpti: PToolInfo; lpText: PChar);
var
Item : THandle;
Rect : TRect;
begin
Item := GetDlgItem(hWnd, id);
if (Item <> 0) AND (GetClientRect(Item, Rect)) then
begin
lpti.hwnd := Item;
lpti.Rect := Rect;
lpti.lpszText := lpText;
SendMessage(hToolTip, TTM_ADDTOOL, 0, Integer(lpti));
end;
end;
.....
// в WM_INITDIALOG суем
CreateToolTips(hwnd);
AddToolHint(hwnd, HandleButton, @ti, 'Text');
Цитата:
Скажите, как сделать так, чтобы если в компонент Image не загружено никакое изображение, настраивать цвет фона, той области, где должно быть изображение?Помести TImage на TPanel
Пытаюсь открывать несколько раз файл, в результате на второй, третий раз в строке Reset(f) возникает ошибка. Решил применить обработчик ошибки try exept, но он не помогает, всеровно показует ошибку в строке Reset(f), а хочу чтобы он выдал сообщение или выполнил другую команду.
var f:file of byte;
fal2:string;
siz1:longint;
begin
fal2:='e:\file\files.txt';
AssignFile(f,fal2);
try
Reset(f);
exept
edit1.text:="Error";
end;
siz1:=FileSize(f);
CloseFile(f);
Почему обработчик ошибки не работает.
var f:file of byte;
fal2:string;
siz1:longint;
begin
fal2:='e:\file\files.txt';
AssignFile(f,fal2);
try
Reset(f);
exept
edit1.text:="Error";
end;
siz1:=FileSize(f);
CloseFile(f);
Почему обработчик ошибки не работает.
Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
Предыдущая тема: 1С: Конвертация данных 2.0
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.