Вопрос № 117617: Здравствуйте.
Подскажите, пожалуйста, как получить при помощи ping более точное время прохождения пакета туда-обратно. Использовала библиотеку Indy 9. свойство TIdIcmpClient - ReplyStatus.MsRoundTripTime (но при помощи него можно регистриров...Вопрос № 117648: Добрый день!
Делаю свой класс, не могу разобраться с событиями.
Вкраце его суть: динамически создает на форме кнопки (и удаляет тоже), при нажатии на какую-либо кнопку, срабатыет событие, общее для всех кнопок, в котором определяется индекс н...Вопрос № 117683: Здравствуйте, уважаемые эксперты! Читаю книгу о COM-объектах. И дело в том, что эта книга рассчитана на людей, когда-либо работавших с этим. А я - первый раз. Написано: устанавливаем метод окна рисования:
function SetWindow(
Handle: Integer):...Вопрос № 117748: Здравствуйте, господа Эксперты!
Вопрос по StringGrid. К нему подключен компонент PopupMenu. Мне нужно, чтобы при щелчке правой кнопкой по ячейке StringGrid'а сначала активировалась ячейка, оказавшаяся под курсором мыши, и лишь после этого пр...Вопрос № 117772: Превед Вам огромный уважаемые эксперты, боюсь спрасить, но спрашиваю, так как деваться некуда. ПОМОГИТЕ МНЕ ПОЖАЛУЙСТА в n- количество раз. Объясняю в чём дело: Ёсть форма, на ней стоит Image1 и Timer1 есть одна папочка, содержащая, bmp'шки.
Как бы м...
Вопрос № 117.617
Здравствуйте.
Подскажите, пожалуйста, как получить при помощи ping более точное время прохождения пакета туда-обратно. Использовала библиотеку Indy 9. свойство TIdIcmpClient - ReplyStatus.MsRoundTripTime (но при помощи него можно регистрировать ответы кратные 1 ms). Хотелось бы 0.001 ms - это возможно?
Отвечает: Drbear
Здравствуйте, Каритан Константин Анатольевич!
Если не ошибаюсь ping отображает время прохождения пакета в ms. Для более точного измерения можно использовать серии ping и находить среднее значение.
Ответ отправил: Drbear (статус: 5-ый класс)
Ответ отправлен: 10.01.2008, 09:57 Оценка за ответ: 2
Вопрос № 117.648
Добрый день!
Делаю свой класс, не могу разобраться с событиями.
Вкраце его суть: динамически создает на форме кнопки (и удаляет тоже), при нажатии на какую-либо кнопку, срабатыет событие, общее для всех кнопок, в котором определяется индекс нажатой кнопки, вот так:
procedure TDynamicSheet.SheetButtonClick(Sender: TObject);
var index:byte;
begin
Index:=(Sender as TButton).Tag;
.......
end;
Но это работает только внутри класса. Как организовать событие кнопки в коде формы?
Отправлен: 09.01.2008, 16:58
Вопрос задал: Red Spirit (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Louken
Здравствуйте, Red Spirit!
Это работает только внутри класса потому, что Вы не передаете обработку события дальше. Нужно определить событие в Вашем классе и установить обработчик этого события в коде формы.
Доработайте свой класс так, как показано в приложении.
Теперь событие OnSheetButtonClick будет дублировать событие обрабатываемое методом SheetButtonClick Вашего класса.
Теперь в коде формы установите обработчик события OnSheetButtonClick и все.
Приложение:
Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 09.01.2008, 21:46 Оценка за ответ: 5 Комментарий оценки: То что надо!
Вопрос № 117.683
Здравствуйте, уважаемые эксперты! Читаю книгу о COM-объектах. И дело в том, что эта книга рассчитана на людей, когда-либо работавших с этим. А я - первый раз. Написано: устанавливаем метод окна рисования:
function SetWindow(
Handle: Integer):
HResult; stdcall;
Я создаю интерфейс, обзываю его, в нем создаю метод и его тоже обзываю. В итоге в исходнике библиотеки получаю:
function SetWindow: HResult; stdcall; тогда как надо, чтобы у этой функции были вышеуказанные параметры. Подскажите, куда нужно вводить параметры, чтобы они появились в исходнике?
Заранее извиняюсь, если некорректно выражался, поскольку с COM работаю впервые и из-за этой ситации не могу дальше развиваться.
Спасибо за внимание!
Отправлен: 09.01.2008, 22:11
Вопрос задал: RegolusX (статус: 2-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Selya
Здравствуйте, RegolusX!
В мастере создания библиотеки типов (Type Library) щёлкни на имени метода, затем на вкладке Parametrs (справа). Там добавляй параметры. В архивчике пара хороших статей, как создавать COM-объекты в Delphi: http://slil.ru/25337271
Ответ отправил: Selya (статус: 3-ий класс)
Ответ отправлен: 10.01.2008, 07:57 Оценка за ответ: 5 Комментарий оценки: Большое спасибо за ответ и за статью! Все получилось. Теперь могу дальше программировать!
Вопрос № 117.748
Здравствуйте, господа Эксперты!
Вопрос по StringGrid. К нему подключен компонент PopupMenu. Мне нужно, чтобы при щелчке правой кнопкой по ячейке StringGrid'а сначала активировалась ячейка, оказавшаяся под курсором мыши, и лишь после этого происходила активация всплывающего меню (именно так действует DBGrid). По умолчанию StringGrid активирует нужную ячейку лишь щелчком левой кнопки, что неудобно для пользователя - приходится делать два щелчка вместо одного. Как можно добиться нужного поведения?
Отправлен: 10.01.2008, 11:17
Вопрос задал: Delph (статус: Студент)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Louken
Здравствуйте, Delph!
Для начала, отключите PopupMenu, его будете вызывать самостоятельно и вставьте такой нехитрый обработчик события мыши OnMouseUp:
Приложение:
Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 10.01.2008, 11:47 Оценка за ответ: 5 Комментарий оценки: ОГРОМНОЕ Вам СПАСИБО!!! Хотел было задать ещё один вопрос, связанный с подавлением меню в случае пустых ячеек, но Вы ответили и на него!
С Вашей помощью я смог полностью решить свою проблему.
Отвечает: Дегтярев Антон Александрович
Здравствуйте, Delph!
Вариант немного грубоват но он работает
в событии onMouseUp в sringgrid напишите слудующий код
if Button = mbLeft then
PopUpMenu1.Popup(form1.Left + stringgrid1.Left + x,form1.Top + stringgrid1.Top + y);
--------- Все грибы съедобны, но некоторые - только раз в жизни
Ответ отправил: Дегтярев Антон Александрович (статус: 3-ий класс)
Ответ отправлен: 10.01.2008, 11:53 Оценка за ответ: 5 Комментарий оценки: Вариант хоть и грубоват, но тоже интересен, поскольку показывает ещё один путь решения проблемы. Спасибо!
Отвечает: Евсюков Виталий Евгеньевич
Здравствуйте, Delph!
Обработайте событие mousedown. Всю необходимую инфу я нашел в хелпе.
Приложение:
--------- I Aear can ve na Mar
Ответ отправил: Евсюков Виталий Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 10.01.2008, 12:51 Оценка за ответ: 4 Комментарий оценки: По сути повторён ответ Louken\'а. То что Louken предложил обрабатывать отпускание мышиной кнопки, а Вы - нажатие, считаю несущественной разницой.
Вопрос № 117.772
Превед Вам огромный уважаемые эксперты, боюсь спрасить, но спрашиваю, так как деваться некуда. ПОМОГИТЕ МНЕ ПОЖАЛУЙСТА в n- количество раз. Объясняю в чём дело: Ёсть форма, на ней стоит Image1 и Timer1 есть одна папочка, содержащая, bmp'шки. Как бы мне поочерёдно их показать? Они не большого размера, единственное чтоб если менялся размер, так это у Image1. Спасибо огромное заранее. Суважением sefiros
Отправлен: 10.01.2008, 13:14
Вопрос задал: Sefiros (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Raptor3
Здравствуйте, Sefiros!
во простой вариант решения
со вкладки win 3.1 бросаем компонент tFileListBox
Приложение:
--------- Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 4-ый класс)
Ответ отправлен: 10.01.2008, 13:36 Оценка за ответ: 5 Комментарий оценки: Простой, дык можеть быть простой, делов том, что на Image ничаге не отображается, а аотображается на этом tFileListBox, и то не картинки, а присутствующие при проекте файлы, но не картинки......мож я не так чаго делаю, я просто вместо крет поставил на активейт......
Отвечает: Drbear
Здравствуйте, Sefiros!
Предлагаю тагой пример. На форме TImage и TTimer. У Image1 AutoSize := True остальные параметры по умолчанию. У Timer1 Enabled := False. Код в примере
Приложение:
Ответ отправил: Drbear (статус: 5-ый класс)
Ответ отправлен: 10.01.2008, 13:42 Оценка за ответ: 5 Комментарий оценки: Спасиб, надеюсь мене ето помогет
Отвечает: Genia007
Здравствуйте, Sefiros!
Вот вам пример рабочего кода
unit Unit1;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Timer1: TTimer;
foto: TListBox;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; i:word;
implementation
uses ShellAPI, ShlObj;// Нужны для работы с диалогом выбора
{$R *.dfm}
procedure FillBMPFileList(Folder: string; sl: TStrings);// процедура добавления файлов в список
var Rec : TSearchRec;
begin
sl.Clear;
if SysUtils.FindFirst(Folder + '*.bmp', faAnyFile, Rec) = 0 then
try
repeat
sl.Add(Folder+Rec.Name);
until SysUtils.FindNext(Rec) <> 0;
finally
SysUtils.FindClose(Rec);
end;
end;
function BrowseDialog(const Title: string; const Flag: integer): string;// вывод диалога выбора файлов
var
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
Result:='';
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
with BrowseInfo do begin
hwndOwner := form1.Handle;
pszDisplayName := @DisplayName;
lpszTitle := PChar(Title);
ulFlags := Flag;
end;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
Result := IncludeTrailingBackslash(TempPath);
GlobalFreePtr(lpItemID);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);// запуск ункции вывода файлов
var fs : string;
begin
fs := BrowseDialog('Выберите папку с BMP файлами', BIF_RETURNONLYFSDIRS);
if fs = '' then Exit;
FillBMPFileList(fs, foto.Items);
timer1.Enabled:=true
end;
procedure TForm1.Timer1Timer(Sender: TObject);// вывод картинок на image
begin
if i= foto.Count-1 then exit;
image1.Picture.LoadFromFile(foto.Items.strings[i]);
inc(i);
end;
end.
Ответ отправил: Genia007 (статус: 4-ый класс)
Ответ отправлен: 11.01.2008, 11:39