Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 928
от 18.09.2007, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 466, Экспертов: 76
В номере:Вопросов: 7, Ответов: 15


Вопрос № 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 адрес) и есть чекбокс а-ля "позвонить".
Из исходного текста программы нужно вырезать имеющиеся формы и сделать так,чтобы данные которые вводятся в поля вышеуказанных форм вводились из командной строки.
Спасибо.
Отправлен: 12.09.2007, 13:20
Вопрос задал: Иванов Виталий (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Igor_
Здравствуйте, Иванов Виталий!

Вам нужно использовать функци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 ? И если можно то каким способом это сделать?
Отправлен: 12.09.2007, 15:41
Вопрос задал: Дрижило Дмитрий Александрович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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

Отвечает: Багель Александр
Здравствуйте, Дрижило Дмитрий Александрович!

Если необходимо следить за буффером глобально, то можно воспользоваться примерно таким кодом:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
hwndNextViewer: THandle;
procedure WMChangeCbChain(var Message: TWMChangeCBChain); message WM_CHANGECBCHAIN;
procedure WMDrawClipboard(var Message: TMessage); message WM_DRAWCLIPBOARD;
end;

var
Form1: TForm1;

implementation

uses
ClipBrd;

{$R *.dfm}

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, если да то как?
Отправлен: 12.09.2007, 18:31
Вопрос задал: Зотов Геннадий Александрович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Примак Руслан Николаевич
Здравствуйте, Зотов Геннадий Александрович!
Для начала вам необходимо разместить 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;

Отвечает: Alexey Bednov
Здравствуйте, Зотов Геннадий Александрович!
CB := TComoBox.Create(StatusBar);
ComboBox.Parent;
CB.Top := 0; CP.Height:=StatusBar.ClientHeight;
CB.Left:=0; CB.Width:=StatusBar.Panels[0].Width;

Данный код создаст объект CB и поместит его на первую панель статус-бара.
Ответ отправил: Alexey Bednov (статус: 2-ой класс)
Ответ отправлен: 14.09.2007, 11:10


Вопрос № 101.812
Добрый день уважаемые эксперты.Подкиньте пожалуйста ссылочку на какой-то ресурс где я бы смог получить информацию о том как програмировать на delphiюПока я только начинаю работать с delphi . хочу научиться писать хотя бы елементарные програмы.
спасибо
Отправлен: 12.09.2007, 19:10
Вопрос задал: Макс Коваленко Юрьевич (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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

Отвечает: Delph
Здравствуйте, Макс Коваленко Юрьевич!

Добавлю к вышеуказанным ресурсам ещё одну ссылку: 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)
Отправлен: 12.09.2007, 19:35
Вопрос задал: Василий Васильевич Сквозняков (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 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 и желательно заданным размером.

Буду всем благодарен за помощь.
Отправлен: 13.09.2007, 08:07
Вопрос задал: Алексей Акишин (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Mishell
Здравствуйте, Алексей Акишин!
1 - смотрите пример в приложении
2 - в ListView картинку загрузить нельзя - возможно Вы имеете ввиду загрузить картинку в ImageList который подсоединен к ListView, тогда например так:
ImageList1.AddIcon('C:icon1.ico');

Приложение:

Ответ отправил: Mishell (статус: 6-ой класс)
Ответ отправлен: 13.09.2007, 10:28
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо.
Все работает только внес изменения в эту строку -
bmp2.Canvas.StretchDraw(R,bmp);


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.59 от 17.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное