Вопрос № 101778: Здравствуйте,господа!
Просьба помочь.
Есть некоторое количество экранных форм для колл-менеджера.
В поля вводится номер(IP адрес) и есть чекбокс а-ля "позвонить".
Из исходного текста программы нужно вырезать имеющиеся ф...Вопрос № 101788: Уважаемые эксперты! Подскажите пожалуйста как работать в Делфи с буфером обмена, например как занести или достать из буфера обмена строку? И еще, нельзя отлавливать в Делфи нажатия клавиш ctrl+c ctrl+v ? И если можно то каким способом это сделать?...Вопрос № 101806: Здравствуйте Уважаемые! В своём приложении я использую встроенный редактор ComboBox
в ячейках StringGrid , а возможно ли использовать его в StatusBar в отдельно взятой Panels, если да то как?...Вопрос № 101812: Добрый день уважаемые эксперты.Подкиньте пожалуйста ссылочку на какой-то ресурс где я бы смог получить информацию о том как програмировать на delphiюПока я только начинаю работать с delphi . хочу научиться писать хотя бы елементарные програмы.
с...Вопрос № 101816: Как сделать чтоб повторялась строчка
if (notepad<>0) then ShellExecute(0, 'open', '1.exe', nil, nil, 0)
else после else надо чтоб повторялась if (notepad<>0) then ShellExecute(0, 'open', '1.exe', nil, nil, 0)
...Вопрос № 101818: Здравствуйте, уважаемые эксперты.
Как програмно создать таймер, если программа и ее окно написаны на winapi, окну должно посылаться сообщение WM_TIMER.
------
function WindowProc (Hwn,msg,wparam,lparam: longint): longint; stdcall;
beg...Вопрос № 101858: Доброго времени суток!
У меня такой вопрос. Каким образом можно открыть картинку (*.jpg), уменьшить размер (напрменр с 800*600 на 200*150) и сохранить в выбранный мной формат(*.jpg, *.bmp или *.ico и т.д.).
Второй вопрос. Как загрузить ...
Вопрос № 101.778
Здравствуйте,господа!
Просьба помочь.
Есть некоторое количество экранных форм для колл-менеджера.
В поля вводится номер(IP адрес) и есть чекбокс а-ля "позвонить".
Из исходного текста программы нужно вырезать имеющиеся формы и сделать так,чтобы данные которые вводятся в поля вышеуказанных форм вводились из командной строки.
Спасибо.
Вам нужно использовать функциb получения параметров командной строки
function ParamCount: Integer; - количество параметров командной строки
function ParamStr(Index: Integer): string; i-й параметр
И при запуске приложения, если в командной строке что-то передали, то заполняем нужные поля (допустим в FormShow главной формы).
Для отладки программы при запуске из Delphi значения параметров командной строки задаются в меню Run->Parametrs
Ответ отправил: Igor_ (статус: 3-ий класс)
Ответ отправлен: 12.09.2007, 15:36 Оценка за ответ: 4
Вопрос № 101.788
Уважаемые эксперты! Подскажите пожалуйста как работать в Делфи с буфером обмена, например как занести или достать из буфера обмена строку? И еще, нельзя отлавливать в Делфи нажатия клавиш ctrl+c ctrl+v ? И если можно то каким способом это сделать?
Отвечает: Delph
Здравствуйте, Дрижило Дмитрий Александрович!
У ряда компонентов (Edit, Memo и др.) есть методы CopyToClipboard (скопировать содержимое в буфер) и PasteFromClipboard (принять из буфера). Попробуйте эти два метода.
--------- Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: 9-ый класс)
Ответ отправлен: 12.09.2007, 16:01
Отвечает: Verena
Здравствуйте, Дрижило Дмитрий Александрович!
Для работы с буфером обмена можно подключить модуль clipbrd.pas, и воспользоваться его возможностями, например: Clipboard.asText:='То, что мы кладём в буфер'; {текст попадает в буфер}
Чтобы извлечь текст из буфера, можно присвоить значение Clipboard.asText в переменную или в какое-нибудь поле на форме.
Можно посмотреть статью, вкратце описывающую возможности работы с буфером: Link
По поводу отлова комбинаций клавиш в Delphi есть несколько событий: OnKeyDown, OnKeyUp и OnKeyPress. О их использовании можно почитать тут: Link .
Удачи!
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 12.09.2007, 16:04
Отвечает: Багель Александр
Здравствуйте, Дрижило Дмитрий Александрович!
Если необходимо следить за буффером глобально, то можно воспользоваться примерно таким кодом:
procedure TForm1.FormCreate(Sender: TObject);
begin
// Добавляем наше окно в цепочку
// зарегистрированных наблюдателей буффера обмена
hwndNextViewer := SetClipboardViewer(Handle);
end;
procedure TForm1.WMChangeCbChain(var Message: TWMChangeCBChain);
begin
// Произошли изменения в цепочке
with Message do
begin
// Если удаляется окно, которому мы должны передавать данные,
// то запоминаем хэндл нового окна в цепочке
if Remove = hwndNextViewer then
hwndNextViewer := Next
// в противном случае передаем сообщение далее
else
if hwndNextViewer <> 0 then
SendMessage(hwndNextViewer, Msg, Remove, Next);
end;
end;
procedure TForm1.WMDrawClipboard(var Message: TMessage);
begin
// Произошли изменения в буффере обмена
// Читаем текст из буффера обмена, если это возможно
if IsClipboardFormatAvailable(CF_TEXT) then
ShowMessage(Clipboard.AsText);
// Передаем уведомление далее по цепочке
with Message do
SendMessage(hwndNextViewer, Msg, WParam, LParam);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// Снимаем наше окно с регистрации в цепочке наблюдателей
ChangeClipboardChain(Handle, hwndNextViewer);
end;
end.
Ответ отправил: Багель Александр (статус: 1-ый класс)
Ответ отправлен: 12.09.2007, 16:38
Отвечает: Gladiator
Здравствуйте, Дрижило Дмитрий Александрович!
Возможно, будет полезен и этот пример работы с буфером обмена.
Приложение:
Ответ отправил: Gladiator (статус: Студент)
Ответ отправлен: 13.09.2007, 08:28
Вопрос № 101.806
Здравствуйте Уважаемые! В своём приложении я использую встроенный редактор ComboBox в ячейках StringGrid , а возможно ли использовать его в StatusBar в отдельно взятой Panels, если да то как?
Отвечает: Примак Руслан Николаевич
Здравствуйте, Зотов Геннадий Александрович!
Для начала вам необходимо разместить TStatusBar и TComboBox на форме. Определитесь с размерами панели TStatusBar'а в которой будет размещен наш ComboBox1: TComboBox
Далее, необходимо увеличить высоту StatusBar1: TStatusBar - так как стандартная высота статуст бара меньше высоты комбобокса и выглядеть это будет не очень красиво. Установите высоту в 22;
Далее, необходимо переподчинить наш комбобокс статусбару, иначе статус бар будет убегать постоянно вниз от комбобокса, при попытке наложить комбобокс на статус бар.
Делаем это в FormCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Parent := StatusBar1;
ComboBox1.BringToFront;
end;
Далее необходимо определиться с размерами нашего комбобокса. Для той панели, которая предназначена для ComboBox1 установите свойство style="psOwnerDraw"
И теперь в StatusBar1.OnDrawPanel можно прописать следующий код:
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
if Panel.Index = 2 then
begin
ComboBox1.Left := Rect.Left;
ComboBox1.Top := Rect.Top;
ComboBox1.Width := Rect.Right - Rect.Left;
ComboBox1.Height := Rect.Bottom - Rect.Top;
end;
end;
где 2 - это индекс той панели, которую я зарезервировал для ComboBox1
Приложение:
Ответ отправил: Примак Руслан Николаевич (статус: 3-ий класс)
Ответ отправлен: 12.09.2007, 19:07 Оценка за ответ: 5 Комментарий оценки: Спасибо получилось только не понял что есть ComboBox1.BringToFront;
Данный код создаст объект CB и поместит его на первую панель статус-бара.
Ответ отправил: Alexey Bednov (статус: 2-ой класс)
Ответ отправлен: 14.09.2007, 11:10
Вопрос № 101.812
Добрый день уважаемые эксперты.Подкиньте пожалуйста ссылочку на какой-то ресурс где я бы смог получить информацию о том как програмировать на delphiюПока я только начинаю работать с delphi . хочу научиться писать хотя бы елементарные програмы.
спасибо
Отвечает: Mishell
Здравствуйте, Макс Коваленко Юрьевич!
http://www.delphikingdom.com/
http://www.delphimaster.ru/
http://delphiworld.narod.ru/
http://www.sources.ru/
http://forum.vingrad.ru/
http://rsdn.ru/
...
но лучше все-таки купить какую-нибудь умную книжку по Дельфи и начать с неё...
Ответ отправил: Mishell (статус: 6-ой класс)
Ответ отправлен: 12.09.2007, 19:38 Оценка за ответ: 4
Добавлю к вышеуказанным ресурсам ещё одну ссылку: www.librus.ru
Там понадобится регистрация, но ничем страшным это Вам не грозит. Я оттуда уже скачал немало полезной литературы, причём не только по Delphi. Выбрав интересующую Вас книгу, нажмите кнопку "Загрузить e-book". Появится окно с одной или несколькими ссылками - в зависимости от размера книги. Для больших книг придётся пройти по всем ссылкам. Начните с первой. Откроется Web-страница с табличкой, где в последней строке справа будет кнопка "Free". Жмите её. На следующей странице начнётся обратный
отсчёт времени. Когда он закончится, в поле редактирования введите код с рисунка рядом. Жмите "Download", и книга (или её часть) загрузится на Ваш компьютер. В случае больших книг нужно сначала загрузить все части архива, и только после этого можно будет открыть его.
--------- Сомневайся во всём! Реальность часто бывает не такой, как мы о ней думаем.
Ответ отправил: Delph (статус: 9-ый класс)
Ответ отправлен: 13.09.2007, 08:10 Оценка за ответ: 5 Комментарий оценки: огромное спасибо
Вопрос № 101.816
Как сделать чтоб повторялась строчка
if (notepad<>0) then ShellExecute(0, 'open', '1.exe', nil, nil, 0)
else после else надо чтоб повторялась if (notepad<>0) then ShellExecute(0, 'open', '1.exe', nil, nil, 0)
Отвечает: Тоха
Здравствуйте, Василий Васильевич Сквозняков!
Попробуйте использовать цикл repeat.
Как я понимаю строчка повторяется до какогото момента
repeat
if (notepad<>0) then ShellExecute(0, 'open', '1.exe', nil, nil, 0) // вставте ваш код
until
//тут напишите условие при котором ваш код будет полностью выполнен
--------- Я не волшебник я только учусь!
Ответ отправил: Тоха (статус: 3-ий класс)
Ответ отправлен: 12.09.2007, 19:49
Отвечает: kopfschwarz
Здравствуйте, Василий Васильевич Сквозняков!
Очевидно (по крайней мере для меня), что рекурсию нужно использовать.
procedure ShellExe(notepad);
begin
if notepad<>0 then
ShellExecute(0,'open','1.exe',nil,nil,0)
else
{----------------}
ShellExe(notepad);
end;
В том месте программы, где у вас начинается код "if notepad<>0...", вы должны будете вставить "ShellExe(notepad);" (впрочем, имя функции может быть произвольным). Но меня смущает условие выхода из рекурсии (и из вашего цикла ветвления). Если на момент выполнения ветвления notepad=0, то мы перейдем на ветку ELSE, в которой тоже notepad=0, и мы вновь перейдем на ELSE. И так до бесконечности. Зависнет это дело по понятным причинам. Поэтому в процедурее ShellExe в месте прочерков нужно
будет как-то указать изменение переменной Notepad. А уж каким оно будет - вне рамок вашего вопроса.
Ответ отправил: kopfschwarz (статус: 6-ой класс)
Ответ отправлен: 12.09.2007, 20:03
Отвечает: Louken
Здравствуйте, Василий Васильевич Сквозняков!
Можно так:
While (notepad=0) do ;
ShellExecute(0, 'open', '1.exe', nil, nil, 0);
Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 13.09.2007, 00:03
Отвечает: Alexey Bednov
Здравствуйте, Василий Васильевич Сквозняков!
while (Notepad<>0) do
ShellExecute(0, 'open', '1.exe', nil, nil, 0);
Ответ отправил: Alexey Bednov (статус: 2-ой класс)
Ответ отправлен: 14.09.2007, 12:13
Вопрос № 101.818
Здравствуйте, уважаемые эксперты.
Как програмно создать таймер, если программа и ее окно написаны на winapi, окну должно посылаться сообщение WM_TIMER.
------
function WindowProc (Hwn,msg,wparam,lparam: longint): longint; stdcall;
begin
result:=defwindowproc(hwn,msg,wparam,lparam);
if msg=wm_timer then ........
Отправлен: 12.09.2007, 19:49
Вопрос задал: Megalamer (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Denisss
Здравствуйте, Megalamer!
Создается таймер функцией SetTimer (Windows). Функция имеет четыре параметра:
hWnd: HWND;
- идентификатор окна, вызывающего таймер (это окно будет получать сообщение WM_TIMER).
nIDEvent: UINT;
- ненулевой идентификатор таймера
uElapse: UINT;
- время срабатывания таймера в милисекундах
lpTimerFunc: TFNTimerProc;
- указатель на функцию-обработчик события таймера (если параметр hWnd указан не нулевой, то эту функцию можно не указывать, т.е. можно указать nil)
Пример создания таймера:
var
// Глобальная переменная
uTimer: UINT;
...
uTimer:= SetTimer(hwnd, 1, 500, nil); if (uTimer = 0) then
MessageBox(hwnd, 'Не удалось создать таймер', 'Ошибка', MB_ICONERROR);
В данном примере создается таймер на 500 мс.
В обработчике сообщений пишете:
if (msg = WM_TIMER) and (wParam = uTimer) then
begin
...
Result:= 0; end;
Для завершения работы таймера, нужно выполнить команду
KillTimer(hwnd, uTimer);
Удачи!
Ответ отправил: Denisss (статус: Профессионал) Россия, Москва ---- Ответ отправлен: 12.09.2007, 20:31 Оценка за ответ: 5 Комментарий оценки: спс
Вопрос № 101.858
Доброго времени суток!
У меня такой вопрос. Каким образом можно открыть картинку (*.jpg), уменьшить размер (напрменр с 800*600 на 200*150) и сохранить в выбранный мной формат(*.jpg, *.bmp или *.ico и т.д.).
Второй вопрос. Как загрузить картинку в ListView и желательно заданным размером.
Отвечает: Mishell
Здравствуйте, Алексей Акишин!
1 - смотрите пример в приложении
2 - в ListView картинку загрузить нельзя - возможно Вы имеете ввиду загрузить картинку в ImageList который подсоединен к ListView, тогда например так:
ImageList1.AddIcon('C:icon1.ico');
Приложение:
Ответ отправил: Mishell (статус: 6-ой класс)
Ответ отправлен: 13.09.2007, 10:28 Оценка за ответ: 5 Комментарий оценки: Большое спасибо. Все работает только внес изменения в эту строку - bmp2.Canvas.StretchDraw(R,bmp);