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

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

Автор: Maks150988
Дата сообщения: 23.10.2007 18:41
Привествую. Хочу добавить на диалог прогресс ну так чисто для понтов в приложении и необходимо при нажатии на кнопку прогнать шкалу 1 раз до 100% и затем чтобы шкала очистилилась - ну чтобы типа все было готово к следующим действиям с прогрессом. Пожскажите что надо в SendMessage послать.
Автор: Jokerjar79
Дата сообщения: 23.10.2007 19:13
Maks150988, в какой диалог?
Автор: Maks150988
Дата сообщения: 23.10.2007 20:44
Jokerjar79
Ну в диалог своей программы.
Автор: Chuvakstepan
Дата сообщения: 24.10.2007 11:41
Проблема с запуском 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;
Автор: informesrab
Дата сообщения: 24.10.2007 18:00
OdesitVadim
Спасибо за помощь, применил другую компоненту и все заработало.
Автор: Maks150988
Дата сообщения: 24.10.2007 18:25
Короче делаю так:


Код:
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);
Автор: Postscriptum
Дата сообщения: 25.10.2007 04:53
Вопрос на засыпку - есть ли для CodeGear RAD Studio Delphi 2007 аналог DDevExtension, т.е. прога, которая позволяет вернуть Палитру компонентов на ее место как в предыдущих версиях Delphi (3-7)? А то версии DDevExtension 1.3 и 1.4 beta совместимы только с Delphi 2006.

Добавлено:
Сорри. Нашел сам новую бетку DDevExtension на http://andy.jgknet.de/dspeedup/builds/
Автор: makbeth
Дата сообщения: 25.10.2007 05:51
Chuvakstepan

Код:
procedure TForm1.goButClick(Sender: TObject);
begin
WinExec (PChar(StatusBar1.Panels[0].Text), sw_show);
Application.Terminate;
end;
Автор: Chuvakstepan
Дата сообщения: 25.10.2007 11:04
makbeth
Большое спасибо за помощь, теперь работает
Автор: DmitryKz
Дата сообщения: 25.10.2007 16:28
Почему не обрабатывается событие KeyDown? В форме установил свойство KeyPreview в true, написал код для события KeyDown, но событие не происходит, не ловится, что ли. Нужно отловить нажатие клавиши Esc.
Автор: DmitryKz
Дата сообщения: 25.10.2007 18:57
Скажите, как физически реализуется, с применением каких "хитростей", такая задача: есть форма с двумя кнопками: Cancel и Ok. Также можно нажать две соответственные клавиши: Esc и Enter. Вопрос в том, как присоединить один обработчик и клавише на клавиатуре, и кнопке на форме?
Автор: SERGE_BLIZNUK
Дата сообщения: 25.10.2007 19:58
DmitryKz
я не очень большой спец, но, как мне кажется, TActionList (с закладки Стандартные)
это именно то, что нужно.
кидаешь его, туда вбиваешь два Action - назначаешь им горячую клавишу, Caption и код обработки на onExecute
потом назначаешь кнопке нужный Action
Автор: ymg2000
Дата сообщения: 25.10.2007 20:09
DmitryKz
Обработай OnKeyPress.(На предпоследний пост от DmitryKz)
Сори, ошибся.
Автор: DmitryKz
Дата сообщения: 25.10.2007 20:54
SERGE_BLIZNUK
Если бы все было так просто я тоже не спец, вот у меня в голове и раздирают противоречия: горячие клавиши для Экшена не подходят, потому как Esc и Enter среди них нет. Для обработки нажатия этих клавиш надо использовать события KeyDown или KeyUp (to ymg2000: а не KeyPress, потому как последний распознает символьные, а не функциональные клавиши). По отдельности написать обработчики труда не составляет, но я не понимаю, как сделать один обработчик и на функциональную клавишу, и на кнопку на форме. Чувствую, что чего не понимаю
Автор: ymg2000
Дата сообщения: 25.10.2007 21:33
DmitryKz
Я тоже не вижу, как это можно сделать. Это ведь два разных события - от клавы и от мыши. Даже если их перехватывать на более низком уровне, все равно нужно перехватывать и клаву и мышь. А зачем тебе так изощряться (все в одном обработчике)?
Автор: akaGM
Дата сообщения: 25.10.2007 22:11
DmitryKz
помнится, я делал вот так:
один и тот же обработчик вешается на keydown формы и на onclick кнопки, а внутри смотришь на tag sender'a ну и в зависимости от него...
не знаю насчёт красоты решения (я тоже совсем не великий vcl-спец), но работало...

---------

отмазка:

если меня совсем переклинило, то прошу не очень больно...
ещё с работы не ушёл...
Автор: ymg2000
Дата сообщения: 25.10.2007 23:47
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.
Автор: AntonVA1
Дата сообщения: 26.10.2007 01:37
А может все намного проще:


Цитата:

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.
Автор: RomanTim
Дата сообщения: 26.10.2007 06:56
DmitryKz
Для обработки ESC и ENTER OnKeyPress хватает полностью: Key = #27 и #13 соответственно
Автор: AntonVA1
Дата сообщения: 26.10.2007 12:56
RomanTim
А что, мое решение не подходит? "Все уже сделано до нас".
Вроде как обрабатываются те же клавиши.
На кнопку Cancel ставишь Cancel Property в true и
на кнопку Ok ставишь Default Property в true
Все работает. При этом кнопка Ok еще и обрамляется рамкой.
Автор: DmitryKz
Дата сообщения: 26.10.2007 15:01
AntonVA1
Спасибо за подсказку, кажется это то, что надо!

Добавлено:
Как обозначается путь к рабочему столу в свойстве path компонента shelltreeview? Я знаю, что по умолчанию вершина и будет рабочим столом, но вот нужно иногда программно это задать?
Автор: Maks150988
Дата сообщения: 27.10.2007 21:02
Блин все интересует впихивание картинки и надписи на кнопку средствами Вин Апи. Ну может быть кто-нибудь знает как сие чудо сотворить или подскажите сайты любителей выкладывания исходничков где есть эта направленность.
Автор: RomanTim
Дата сообщения: 28.10.2007 09:32
AntonVA1
В большинстве ситуаций действительно подходит, сам так всегда делаю, за исключением одного момента - если на модальной форме есть TMemo и фокус на ней, то Esc не приводит к срабатыванию кнопки с Cancel=True
А знать то, что Enter и Esc можно в OnKeyPress обработать, имхо, не помешает
Автор: lavren
Дата сообщения: 29.10.2007 10:42
Maks150988

Цитата:
подскажите сайты любителей выкладывания исходничков

http://delphimaster.ru/cgi-bin/forum.pl?n=5
http://delphikingdom.ru/table/page.asp
Автор: MrZeRo
Дата сообщения: 29.10.2007 18:11
Maks150988
Исходники VCL, модуль buttons.pas - вот хороший исходничек по этой теме.
Автор: DmitryKz
Дата сообщения: 29.10.2007 18:46
Скажите, как сделать так, чтобы если в компонент Image не загружено никакое изображение, настраивать цвет фона, той области, где должно быть изображение?
Автор: akaGM
Дата сообщения: 29.10.2007 19:04
ymg2000

Цитата:
В данном случае так не получится, т.к. OnKeyDown и OnClick разнотипные обработчики.

полностью согласен...
забыл, что делал их для однотипных обработчиков,
но однотипных лишь по числу/типу параметров...
Автор: Maks150988
Дата сообщения: 29.10.2007 20:55
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');
Автор: nuker2015
Дата сообщения: 30.10.2007 01:51

Цитата:
Скажите, как сделать так, чтобы если в компонент Image не загружено никакое изображение, настраивать цвет фона, той области, где должно быть изображение?
Помести TImage на TPanel
Автор: informesrab
Дата сообщения: 30.10.2007 13:18
Пытаюсь открывать несколько раз файл, в результате на второй, третий раз в строке 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);

Почему обработчик ошибки не работает.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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