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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

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

Выпуск № 1081
от 03.03.2008, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 442, Экспертов: 62
В номере:Вопросов: 5, Ответов: 13

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 124977: задача : при наведении мышкой на любую точку изображения всплывает hint с координатами этой точки. проблема : использую MouseMove, но подсказки всплывают только если при движении мышки пересекается граница формы, или если кликнуть на изображение....
Вопрос № 125006: Уважаемые эксперты, у меню не получается, казалось бы, элементарная вещь. Я не могу передать указатель на массив в функцию. Функция должна преобразовывать строку в массив символов. Массив объявлен так: type TShellLinkInfoStruct = record //Ин...
Вопрос № 125038: Здравствуйте уважаемые эксперты. Такая проблема. Есть три зависимые таблицы таблица и два раскрывающегося списка использующиеся для заполнения четвертой таблицы. Раскрывающиеся списки берут свои значения из таблиц. Как сделать что б при выборе записи...
Вопрос № 125057: Здравствуй народ. W2000 SP4, Delphi 7. Как получить параметры (характеристики) принтера, установленного в системе?...
Вопрос № 125108: здравствуйте уважаемые эксперты! Подскажите каким образом программно (посылкой сообщений или еще как...) нажать на клавишу стоп, запуск - закачки в Download Master'e ?...

Вопрос № 124.977
задача : при наведении мышкой на любую точку изображения всплывает hint с координатами этой точки.
проблема : использую MouseMove, но подсказки всплывают только если при движении мышки пересекается граница формы, или если кликнуть на изображение... плиз хелп !
Отправлен: 26.02.2008, 19:40
Вопрос задала: Syamka (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Louken
Здравствуйте, Syamka!

Код в приложении.
Только предварительно:
Form1.ShowHint:=false;
Image1.ShowHint:=true;

Приложение:

Ответ отправил: Louken (статус: Студент)
Ответ отправлен: 26.02.2008, 20:54
Оценка за ответ: 5
Комментарий оценки:
все заработало :)

Отвечает: Genia007
Здравствуйте, Syamka!
Можно поступить так всё прекасно работает:

public
{ Public declarations }
procedure OnShowHint(var HintStr: string;
var CanShow: Boolean;
var HintInfo: THintInfo);
var
Form2: TForm2;
LeftH, TopH: Integer;

procedure TForm2.OnShowHint(var HintStr: string;
var CanShow: Boolean;
var HintInfo: THintInfo);
var
Pos: TPoint;
begin
with HintInfo do
if HintControl is TImage then // Проверка на нужный объект
with HintControl as TImage do
begin
Pos.X := LeftH+10;
Pos.Y := TopH;
HintPos := Image1.ClientToScreen(Pos);
HintStr := Image1.Hint;
end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
Application.OnShowHint := OnShowHint; // Установка обработчика
Application.ShowHint := True;
Application.HintHidePause := 2000;
end;

procedure TForm2.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
MousePos: TPoint;
FHint: string;
Pos: TPoint;
begin
MousePos.X := X;
MousePos.Y := Y;
Pos:=MousePos;
LeftH := X;
TopH := Y;
FHint := inttostr(x) + ' , ' + inttostr(y);
Image1.Hint := FHint;
application.ActivateHint(Pos);
end;
Ответ отправил: Genia007 (статус: 7-ой класс)
Ответ отправлен: 28.02.2008, 12:30


Вопрос № 125.006
Уважаемые эксперты, у меню не получается, казалось бы, элементарная вещь. Я не могу передать указатель на массив в функцию. Функция должна преобразовывать строку в массив символов. Массив объявлен так:
type
TShellLinkInfoStruct = record //Информация о ярлыке
NameLink: array[0..MAX_PATH] of Char; //Полное имя ярлыка
...
var
LinkInfo: TShellLinkInfoStruct;
Вызов функции: StrToArray(@LinkInfo.NameLink, LinkDir+LinkName);
Сама функция в приложении.
При отладке:
LinkInfo.NameLink='C:Documents'...
@LinkInfo.NameLink=$416888
PMas=$416888
PMas^=#0#0#0#0#0#0#0#0#0#0... //Тут собственно и проблема.
Почему значения LinkInfo.NameLink и PMas^ не равны?
Подскажите как исправить код.

Приложение:

Отправлен: 26.02.2008, 22:03
Вопрос задал: Хукаленко Дмитрий (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Selya
Здравствуйте, Хукаленко Дмитрий!
Я не понял, зачем вам это надо, ведь string это и есть массив символов, а PChar - массив символов с завершающим нулём. Разве только чисто в образовательных целях?
Тогда просто надо поставить var в объявлении процедуры:
procedure StrToArray(var PMas: PArrayOfChar; s: string);
Хотя правильнее было бы так:
procedure StrToArray(s: string; var PMas: PArrayOfChar);
Ещё правильнее было бы использовать как функцию (см.прил.)

Приложение:

Ответ отправил: Selya (статус: 8-ой класс)
Ответ отправлен: 27.02.2008, 07:49
Оценка за ответ: 4
Комментарий оценки:
"Я не понял, зачем вам это надо". Я изучал работу с ярлыками по примеру из DelphiWorld: http://narod.yandex.ru/cgi-bin/yandmarkup?cluster=14&prog=0x2757571A&HndlQuery=98679120&PageNum=0&g=0&d=0&q0=1956199264&p=. Там в качестве параметров ярлыка испольцуются поля вида array[0..MAX_PATH] of char, а мне нужно туда передать значение строки string. Вот я и извращаюсь как могу с написанием функции. Использовать как функцию я питался, но не сообразил как потом полученный указатель тому же LinkInfo.NameLink присвоить.

Отвечает: Sosedov A.I.
Здравствуйте, Хукаленко Дмитрий!

По окончании цикла по i в процедуре StrToArray значение переменной цикла i не обязано быть равно length(s). Об этом, кстати, предупреждает Вас компилятор.
И еще обратите внимание, что s[i+1] при i=length(s) содержит неопределенное значение. Мне показалось, что Ваша программа нуждается в оптимизации. Зачем строку превращать в массив, да еще и с огромным запасом по длине, если строка и так представляет собой массив символов?
Ответ отправил: Sosedov A.I. (статус: 2-ой класс)
Ответ отправлен: 27.02.2008, 08:51
Оценка за ответ: 5
Комментарий оценки:
"По окончании цикла по i в процедуре StrToArray значение переменной цикла i не обязано быть равно length(s). Об этом, кстати, предупреждает Вас компилятор. И еще обратите внимание, что s[i+1] при i=length(s) содержит неопределенное значение." Абсолютно верные замечания. Внёс соответствующие изменения в код. Спасибо.


Вопрос № 125.038
Здравствуйте уважаемые эксперты. Такая проблема. Есть три зависимые таблицы таблица и два раскрывающегося списка использующиеся для заполнения четвертой таблицы. Раскрывающиеся списки берут свои значения из таблиц. Как сделать что б при выборе записи таблицы в списке1, во втором списке отображались только зависимые строки. Спасибо!
Отправлен: 27.02.2008, 06:38
Вопрос задал: Lammer (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лысенков Антон Анатольевич
Здравствуйте, Lammer!

Во второй таблице нужно указать MasterSource и MasterField. MasterSource должен указывать на DataSource связанный с 1-й таблицей. MasterField соответственно на поле в 1 таблице.
Ответ отправил: Лысенков Антон Анатольевич (статус: 6-ой класс)
Ответ отправлен: 27.02.2008, 10:51
Оценка за ответ: 5
Комментарий оценки:
Спасибо! Я разобрался. Просто у меня таблицы не правильно разбиты были.

Отвечает: Соловьев Евгений
Здравствуйте, Lammer!
А по-моему вы сами ничего не понимаете, что хотите =)
Первый ответ был правильным.
Но можете использовать Query и помощью его отфильтровывайте ненужные данные для дальнейшего ввода или выбора:
в SQL задайте нужные параметры, типа пример
SELECT *
FROM ВАША_ТАБЛИЦА
WHERE ВАШЕ_ПОЛЕ(НАЗВ_СТОЛБЦА) LIKE :EVERYTHING(любой параметр)
И в Parameters появится ваш EVERYTHING, значение которого вы легко можете менять:
Query.Parameters.ParamByName('EVERYTHING').Value:=значение из 1 таблицы,из которого идет выбор первоначальный.
Если вы используете LookupComboBox-ы, то лучше задать на OnClick.
Если ничего не понятно, скачайте книгу "Библия для программиста в среде ДЕЛЬФИ" авт.Фленов Михаил, Гл.14-2. Там всё понятным языком описано.
Ответ отправил: Соловьев Евгений (статус: 1-ый класс)
Ответ отправлен: 27.02.2008, 13:08
Оценка за ответ: 5
Комментарий оценки:
Спасибо за советы. Теперь все работает!


Вопрос № 125.057
Здравствуй народ. W2000 SP4, Delphi 7. Как получить параметры (характеристики) принтера, установленного в системе?
Отправлен: 27.02.2008, 09:28
Вопрос задал: Карасев Алексей Александрович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Selya
Здравствуйте, Карасев Алексей Александрович!
Из книги "Delphi 5, Руководство разработчика - Глава 10. Печать в Delphi 5"

Структура TDeviceMode
Структура TDeviceMode содержит информацию об инициализации драйвера принтера и данные среды. Программисты используют эту структуру для считывания информации или для установки различных атрибутов текущего принтера. Определение этой структуры приведено в тексте модуля Windows.pas.

Описание каждого поля можно найти в интерактивной справочной системе Delphi. Наиболее употребительные поля этой структуры рассматриваются в следующих разделах, но всетаки вам стоит обратиться к справке Delphi и поинтересоваться назначением остальных ее полей. В некоторых случаях они могут сослужить хорошую службу, а кроме того, важно знать, что некоторые из них по-разному используются в Windows NT/2000 и Windows 95/98.

Чтобы получить указатель на структуру TDeviceMode текущего принтера, нужно предварительно вызвать метод TPrinter.GetPrinter() для получения дескриптора блока памяти, занимаемого этой структурой. Затем следует вызвать функцию GlobalLock(), которая возвратит указатель на интересующую нас структуру. В листинге 10.5 показано, как можно получить указатель на структуру TDeviceMode.

(см.прил.)

Приведенные в листинге 10.5 комментарии разъясняют действия, выполняемые для получения указателя на структуру TDeviceMode. С этим указателем могут работать самые разные подпрограммы печати, что демонстрируется в следующих разделах. Но сначала стоит обратить внимание на один комментарий:

{ Использование структуры DevMode }
{ !!!! }
Это как раз то самое место, где следует разместить текст, различные варианты которого приводятся ниже.

Прежде чем инициализировать какой-либо член структуры TDeviceMode, необходимо конкретно указать, какой член вы собираетесь инициализировать. Это делается путем установки соответствующего разряда в поле признаков dmFields. В табл. 10.3 перечислены различные битовые признаки поля dmFields с указанием члена структуры TDeviceMode, к которому они относятся.

(см.прил.)

и т.д.

Рекомендую почитать классику "Delphi 5. Руководство разработчика" (Тейксейра, Пачеко):
Том1: http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/D5/Delphi5vol1.pdf&file_id=Delphi5vol1

Том2: http://podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Delphi/D5/Delphi5vol2.pdf&file_id=Delphi5vol2

И сразу многие вопросы отпадут.

Приложение:

Ответ отправил: Selya (статус: 8-ой класс)
Ответ отправлен: 27.02.2008, 09:59

Отвечает: Drbear
Здравствуйте, Карасев Алексей Александрович!

В дополнение к предыдущему ответу, могу предложить пример http://rusfaq.ru/upload/203
Ответ отправил: Drbear (статус: 7-ой класс)
Ответ отправлен: 27.02.2008, 10:09

Отвечает: Синельников Сергей
Здравствуйте, Карасев Алексей Александрович!

Не берусь утверждать, но может быть попробывать изменить имя и пароль во всех службах сервера, которые запускаются при старте виндовса. "Администрирование"->"Управление компьютером"->"Службы и приложения->"Службы". Находите нужную, правой кнопкой кликаете и прямиком на закладку вход в систему. Должно помочь по-моему
Ответ отправил: Синельников Сергей (статус: 4-ый класс)
Ответ отправлен: 28.02.2008, 06:03

Отвечает: Genia007
Здравствуйте, Карасев Алексей Александрович!
Я просто кидаю на форму компонент TPrinterSetupDialog и по нажатию кнопки пишу:
PrinterSetupDialog1.Execute;
Откуда нажатием кнопки свойства и вижу установленные параметры.
Ответ отправил: Genia007 (статус: 7-ой класс)
Ответ отправлен: 28.02.2008, 12:31


Вопрос № 125.108
здравствуйте уважаемые эксперты! Подскажите каким образом программно (посылкой сообщений или еще как...) нажать на клавишу стоп, запуск - закачки в Download Master'e ?

Приложение:

Отправлен: 27.02.2008, 14:00
Вопрос задал: Черных Максим (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sosedov A.I.
Здравствуйте, Черных Максим!

Никогда не видел программу DownLoad Master... да и не важно. Предположим, что окно программы имеет заголовок "DownLoadMaster", а надо нажать кнопку "Start":

var
Handle: HWND;

begin
// Получаем дескриптор окна программы
Handle:=Windows.FindWindow(nil,PChar('DownLoadMaster'));
if Handle<>0 then begin
ClickButton(Handle, 'Start');
end.

Для работы программы требуются 2 функции (см. приложение).
К сожалению, не смогу привести список требуемых библиотек, нет под рукой... Да поможет Вам компилятор!

Приложение:

Ответ отправил: Sosedov A.I. (статус: 2-ой класс)
Ответ отправлен: 27.02.2008, 15:55

Отвечает: Drbear
Здравствуйте, Черных Максим!

В DownLoad Master используется TToolBar, а TToolButton не является самостоятельным элементом, а просто рисунок на TToolBar, и своего Handle не имеет. Поэтому вижу 3 пути:
- обрабатывать средствами WinAPI события TToolBar по его Handle;
- имитировать нажатие кнопки в нужных координатах. DM должен быть развернут.
- самое простое, по моему, в данной ситуации нажать пункт меню. Код в приложении. На форме Edit куда пишется имя DM и 3 кнопки.

Приложение:

Ответ отправил: Drbear (статус: 7-ой класс)
Ответ отправлен: 27.02.2008, 18:31

Отвечает: Raptor3
Здравствуйте, Черных Максим!

Еще вариант использовать быстрые клавиши

ctrl+S ctrl+P - для старта и стопа закачки
---------
Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 5-ый класс)
Ответ отправлен: 28.02.2008, 06:03


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


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

В избранное