Вопрос № 66615: Уважаемые эксперты, помогите пожалуйста.
Не силен в Delphi, и совсем не знаю что делать...
Есть модуль главной формы проекта - unit Main
И модуль потока - unit TestThread;
И есть переменные i, WorkFlag которые должны быть до...Вопрос № 66644: Здравствуйте, уважаемые эксперты.
У меня в проекте используются две формы: одна главная, другая создается при необходимости. Вторая - это что-то вроде предпросмотра картинки.
Я пытаюсь сделать так, чтобы эта форма создавалась "залипающе...Вопрос № 66678: Добрый вечер! Извените за глупый вопрос но у меня нет закладки Midas какой нужно добавить компонент, Delphi 7 заранее спасибо!...Вопрос № 66706: Здравствуйте!
Вы можете привести пример обмена сообщениями между двумя приложениями по сети?
К примеру, первое приложение шлёт "Привет!" второму, на что тот отвечает "Здорово!".
У меня куча примеров для ClientSocket, S...Вопрос № 66743: здравствуйте эксперты! Помогите решить задачу:
Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О. абитуриента, оценки( мат.,физ.,язык).
Определить средний балл по университету и вывести список абитуриентов...Вопрос № 66768: Доброго времени суток!
О вопросе № 66465.
Меня не интересовали дополнительные компоненты, моё приложение не будет находится в трее. И вообще из трея показываются не Balloon Tips, а Balloon Hints.
Думаю о двух способах:
1. Отрисовка пр...
Вопрос № 66.615
Уважаемые эксперты, помогите пожалуйста.
Не силен в Delphi, и совсем не знаю что делать...
Есть модуль главной формы проекта - unit Main
И модуль потока - unit TestThread;
И есть переменные i, WorkFlag которые должны быть доступны во всех функциях и процедурах обоих модулей.
Где, в каком разделе нужно объявить эти переменные???
P.S.: Прилагаю код, но на него особо внимания не обращайте, это пробный вариант.
Отвечает: PaVeL_Ekt
Здравствуйте, Пепеляев Александр Павлович!
Объявляйте их в юните Main как глобальные;
где
Var Form1: TForm1;
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 8-ой класс)
Ответ отправлен: 12.12.2006, 08:59 Оценка за ответ: 5 Комментарий оценки: Да, вроде получилось. Еще надо добавить uses Main; в модуле unit TestThread;
Отвечает: Химяк Виктор Васильевич
Здравствуйте, Пепеляев Александр Павлович!
Создайте третий модуль н-р uVariable, в котором опишите нужные переменные, а потом подключите его в Main и в TestThread.
Ответ отправил: Химяк Виктор Васильевич (статус: 2-ой класс)
Ответ отправлен: 12.12.2006, 17:11 Оценка за ответ: 4
Отвечает: Писарев, Павел, Юрьевич
Здравствуйте, Пепеляев Александр Павлович!
Насколько я знаю переменные, типы, константы, процедуры, функции и т. д. для того чтобы быть доступны в других модулях, где это модуль используется, должны быть описаны в интерфейсной (interface) части.
Ответ отправил: Писарев, Павел, Юрьевич (статус: 2-ой класс)
Ответ отправлен: 12.12.2006, 22:22
Поясняю.Если форма в модуле Unit1 должна управлять формой в модуле Unit2,то в оператор uses модуля Unit1 должно быть включено имя второго модуля.В свою очередь,если форма в модуле Unit2 должна пользоваться процедурами или каким-либо кодом,содержащимся в модуле Unit1,то в uses модуля Unit2 должно быть введено имя модуля Unit1.
Смотрите структуру модуля,я всё пояснил:
unit Unit1; //имя модуля
interface //открытый интерфейс модуля
{Сюда могут помещаться списки подключаемых модулей,объявления типов,констант
переменных,фунций,процедур,К КОТОРЫМ БУДЕТ ДОСТУП ИЗ ДРУГИХ МОДУЛЕЙ}
type //объявляются классы формы
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private //закрытый раздел класса
{ Private declarations }
{Сюда могут помещаться объявления типов,констант переменных,фунций,
процедур,К КОТОРЫМ ДОСТУП ИЗ ДРУГИХ МОДУЛЕЙ ЗАКРЫТ}
public //открытый раздел класса
{ Public declarations }
{Сюда могут помещаться объявления типов,констант переменных,фунций,
процедур,КОТОРЫЕ НЕ БЫЛИ ВКЛЮЧЕНЫ В КЛАСС ФОРМЫ}
end;
var //ОБЪЯВЛЕНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ
Form1: TForm1;
{Сюда могут помещаться объявления типов,констант переменных,фунций,
процедур,К КОТОРЫМ ДОСТУП ИЗ ДРУГИХ МОДУЛЕЙ ЗАКРЫТ}
implementation //реализация модуля
uses Unit2; //ОБЪЯВЛЕНИЕ ССЫЛКИ НА ДРУГОЙ МОДУЛЬ
{Сюда могут помещаться списки подключаемых модулей,объявления типов,констант
переменных,фунций,процедур,не объявленных ранее,но К КОТОРЫМ НЕ БУДЕТ ДОСТУПА
ИЗ ДРУГИХ МОДУЛЕЙ}
{$R *.dfm}
{здесь помещается,собственно сам код программы,то есть процедуры,функции,
переменные,константы и т.д}
procedure TForm1.FormCreate(Sender: TObject);
begin
TForm2.Create(Application);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
Form2.Color:=clRed;
end;
end. //Завершение работы всего модуля
Следует так же заметить и это ВАЖНО!!!
Если вы используете циклические ссылки с помощью предложения uses, ни в коем случае нельзя их размещать в разделах interface!!!
Для первого модуля
unit Unit1
...
interface
uses ... Unit2
implementation
...
Для второго модуля
unit Unit2
...
interface
uses ... Unit1
implementation
При этом компилятор выдаст вам ошибку!
Правильно будет так:
Для первого модуля
unit Unit1
...
interface
implementation
uses ... Unit2
...
Для второго модуля
unit Unit1
...
interface
implementation
uses ... Unit2
...
Надеюсь,теперь вам стало ясно,куда помещать свои переменные.
Удачи!!
Ответ отправил: KiberZero (статус: 4-ый класс)
Ответ отправлен: 12.12.2006, 22:36 Оценка за ответ: 5 Комментарий оценки: Спасибо за подробный ответ. Вот еще бы в книгах так писали, тогда бы я не задавал вопросов. Ну а теперь, просто грех не поставить оценку...
Вопрос № 66.644
Здравствуйте, уважаемые эксперты.
У меня в проекте используются две формы: одна главная, другая создается при необходимости. Вторая - это что-то вроде предпросмотра картинки.
Я пытаюсь сделать так, чтобы эта форма создавалась "залипающей" кнопочкой SpeedButton: в положении Down - форма есть, в положении not Down - чтобы она пряталась.
Я хочу, чтобы когда создается этот предпросмотр(вторая форма), фокус оставался на главной форме, но при этом чтобы эта вторая форма даже не активированная находилась над главной (но не над всеми окнами как при StayOnTop).
Т.е. по нажатию SpeedButton включитьвыключить предпросмотр при этом чтобы фокус оставался на форме, которая создает этот предпросмотр.
Как это сделать?
Спасибо за ответы.
Отправлен: 12.12.2006, 12:26
Вопрос задал: Lichkaty (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Lichkaty!
Может я конечно покажусь неправым, но стандартными методами нельзя чтобы один единственный speedbutton нажимался и отжимался (их должно быть минимум 2), поэтому рекомендую использовать checkbox, а насчет stayontop вопрос интересный. Вы хотите чтобы она у вас постоянно болталась над главной формой. и при этом не перекрывала чужие (если их открыть). Самый простой способ это сделать, это у главной свойство FormStyle поставить в fsMDIForm, а у предпросмотра в fsMDIChild. Правда в этом случае Вы ее не сможете утащить
за пределы главной.
--------- Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
Прежде всего,хочу пояснить,что особенностью кнопки SpeedButton являются свойства GroupIndex(),AllowAllUp() и Down.
Если GroupIndex=0,то кнопка ведёт себя так же,как Button.Если GroupIndex >0 и AllowAllUp=True,то кнопка погружается и остаётся нажатой.При повторном щелчке она возвращается в исходное положение.Теперь собственно по вашему вопросу.Задайте свойство GroupIndex=1,а AllowAllUp=True,остальное делаете программно.После создания двух форм,вторую из них переносите в область доступных форм(ProjectOptions).Незабудьте указать в разделе uses имя второй формы.Ну,вроде,всё,остаётся написать код.Для этого воспользуйтесь всем
любимым оператором выбора if..then.Далее-создаёте вторую форму методом FormCreate,а по нажатию кнопки,сначала делаете её видимой,а потом отдаёте фокус главной форме.Далее,пожалуй разберётесь с примером кода.
Исходник кода программы:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Далее смотрите приложение.
Удачи!
Приложение:
Ответ отправил: KiberZero (статус: 4-ый класс)
Ответ отправлен: 12.12.2006, 18:40
Вопрос № 66.678
Добрый вечер! Извените за глупый вопрос но у меня нет закладки Midas какой нужно добавить компонент, Delphi 7 заранее спасибо!
Отправлен: 12.12.2006, 16:27
Вопрос задал: ERA (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Алтунин Василий Владимирович
Здравствуйте, ERA!
Возможно, что при установке в setup вы не выбрали Мидас для установки. Вам нужно установить package для Midas, проще всего повторить установку дельфи или доустановить отсутствующие пакеты. Либо Мидас не входит в вашу версию делфи. Тогда придется качать package из инета.
--------- ... Дорогу осилит Идущий ...
Ответ отправил: Алтунин Василий Владимирович (статус: 3-ий класс)
Ответ отправлен: 12.12.2006, 17:04 Оценка за ответ: 2 Комментарий оценки: Читай ответы других экспертов
Отвечает: Химяк Виктор Васильевич
Здравствуйте, ERA!
За точность я не ручаюсь, но MIDAS в D7 переименовано то ли dbExpress, то ли в DataSnap. Поищите нужные компоненты на соответствующих вкладках.
Ответ отправил: Химяк Виктор Васильевич (статус: 2-ой класс)
Ответ отправлен: 12.12.2006, 17:06 Оценка за ответ: 5 Комментарий оценки: спасибо
Отвечает: KiberZero
Здравствуйте, ERA!
Прежде всего необходимо внести ясность относительно MIDAS.Впервые,эта технология была введена в 4 версии Delphi,продожена и усовершенствована в 5 версиии.Начиная с 6 версии клиентские компоненты доступа к данным CLX были пересмотрены и усовершенствованы.Сами понимаете,ничего не стоит на месте,всё течёт,всё изменяется!Начиная с 6 версии был введён новый набор компонентов и драйверов dbExpress — одно из самых больших достижений для обеспечения совместимости с Linux, поскольку он представляет собой реальный и окончательный
вариант альтернативы BDE, которая в последнее время действительно начала устаревать.Все!! компоненты данной страницы были введены именно с этой версии и не имели никакого отношения к странице dbExpress.С этой же версии появились компоненты DataSnap. На этой странице сосредоточены компоненты, реализующие взаимодействие машин в локальной сети или Интернет в типичном для БД случае, когда клиент работает с удаленными данными. Часть компонентов этой страницы действ
ительно известны по другим версиям Delphi(4,5) со страницы MIDAS,но не более того,да и то многие свойства и методы этих компонентов были усовершенствованы.Так что как таковой,в палитре компонентов в 7 версии тем более - нет!Конечно,компонентами DataShap довольно удобно пользоваться для создания приложений с параллельными потоками.Но если вас это не устраивает,что ж,скачайте просто компоненты MIDAS если я не ошибаюсь с http://home.earthlink.net/ или http://fp.grsu.by и установите их себе.
Что же касается переустановки,даже не думайте!Нет там никаких галок для установки этой палитры компонентов.Первоначально в 4 версии,действительно, была введена дополнительная функция установки этих компонентов.В 5 версии она устанавливается автоматически,но не полностью.Тут была введена дополнительная установка.Но в последних подверсиях 5 версии,вообще убрали,вся палитра устанавливалась автоматически.Короче,дальше решайте сами,как ва поступить.
Удачи!
Ответ отправил: KiberZero (статус: 4-ый класс)
Ответ отправлен: 12.12.2006, 20:41 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо за полный ответ и главное за качественный ответ
Вопрос № 66.706
Здравствуйте!
Вы можете привести пример обмена сообщениями между двумя приложениями по сети?
К примеру, первое приложение шлёт "Привет!" второму, на что тот отвечает "Здорово!".
У меня куча примеров для ClientSocket, ServerSocket. Но где они в Дельфи 7? Помогите разобраться.
Заранее спасибо.
Отправлен: 12.12.2006, 20:59
Вопрос задал: Yadovit (статус: 3-ий класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Маренич Владимир
Здравствуйте, Yadovit!
В Delphi 7 у меня находится пример в папке "C:Program FilesBorlandDelphi7DemosInternetNetChat"
Посмотрите у себя.
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 13.12.2006, 01:53 Оценка за ответ: 3
Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Yadovit!
Может быть я конечно неправильно понял, но по моему Вы ищети сами компоненты, а не примеры к ним (т.к. Вы же сказали что у Вас к ним куча примеров). По умолчанию (после установки) они не подключены. Для того чтобы их подключить зайдите в меню Component->Install Packages нажмите там кнопочку Add и в появившемся окошечке выбора выберите файлик dclsockets70.bpl (у меня он лежит в папке ...delphi7in. Тогда они появятся на вкладке Internet. Извините если не правильно понял Ваш вопрос
--------- Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
здравствуйте эксперты! Помогите решить задачу:
Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О. абитуриента, оценки( мат.,физ.,язык).
Определить средний балл по университету и вывести список абитуриентов, средний балл которых выше среднего по университету.
Первыми в списке должны идти студенты, сдавшие все экзамены на 5.
В программе предусмотрено сохранение вводимых данных в файле и возможность чтения из ранее сохраненного файла, добавление новых записей.
Спасибо!
Отправлен: 13.12.2006, 02:00
Вопрос задал: Whitesnake (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: PaVeL_Ekt
Здравствуйте, Whitesnake!
для хранения данных лучше используйте БД (SQL)
(Ф.И.О. абитуриента, мат, физ, язык, ср. балл)
затем сперва расчитать средний балл на одного абитуриента и записать в бд, а затем расчитать средний балл на всех аббитуриентов
(ср балл расчитываеться (ср.балл 1 абитуриента+...+ср.балл последнего абитуриента)/кол-во абитуриентов)
затем выводить всех у кого средний балл больше найденного, и делать сортировку по убыванию по среднему баллу
sql запрос:
Select * from Abiturients where sr_ball>4.12
order by sr_ball
а в файл можно записывать и считывать соответственно тремя разными способами
через нетипизированный файл, через типизированный файл, через файловый поток (TFILESTREAM)
Если будут вопросы, а они скорее всего будут пиши на мыло или по ICQ
(указана в регистрационной карточке)
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 8-ой класс)
Ответ отправлен: 13.12.2006, 07:16
Вопрос № 66.768
Доброго времени суток!
О вопросе № 66465.
Меня не интересовали дополнительные компоненты, моё приложение не будет находится в трее. И вообще из трея показываются не Balloon Tips, а Balloon Hints.
Думаю о двух способах:
1. Отрисовка прямо на экране, в области System Tray.
2. Создание нестондартной формы всё в той же области.
По первому способу возникло сразу несколько вопросов:
1. Размер текстового сообщения заранее не известен, как его можно вычеслить, чтобы размер фона не оказался меньше или больше текста.
2. Как сделать постепенное появление сообщения, то есть прозрачность.
3. Ну нарисовал, вывел текст, а как его оттуда обрать?
По второму вопросу пока только один вопрос: Как сделать полупрозрачную форму?
Заранее благодарю?
Отправлен: 13.12.2006, 07:27
Вопрос задал: Prowler (статус: 1-ый класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: PaVeL_Ekt
Здравствуйте, Prowler!
По второму вопросу: в делфе 6 у формы есть свойство
AlphaBlend вкл/выкл прозрачности
и AlphaBlendValue от 0 до 255 уровень прозрачности формы, которые собственно и задают прозрачность
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 8-ой класс)
Ответ отправлен: 13.12.2006, 07:40
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Prowler!
Размер сообщения получается легко. Берете любой объект (пусть это будет SomeObject) с канвой, устанавливаете нужные параметры SomeObject.Canvas.Font, И применяете методы:
s := MyEditWithText.Text;
w := SomeObject.Canvas.TextWidth(s);
h := SomeObject.Canvas.TextHeight(s);
Ес-сно, учет переноса текста на новую строку и пр придется осуществлять самому.
Рисовать на десктопе можно с использованием контекста устройства:
hdc := GetDC(nil);
И далее см. любую справку по WinAPI
только я что-то никак не пойму, как перерисовывать на столе.
--------- Не узнаешь - не попробуешь.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 13.12.2006, 12:30 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Rusland
Здравствуйте, Prowler!
Посмотрите код в приложении. Это способ вызова стандартных baloon-ов. Установка позиции - см. TTM_TRACKPOSITION.
В uses нужно подключить CommCtrl.
Приложение:
--------- Если партия скажет есть контакт, будем есть контакт.
Ответ отправил: Rusland (статус: Профессионал) Россия, Казань Адрес: Мой адрес не дом и не улица, мой адрес советский союз WWW:Логотипы для сотовых телефонов ---- Ответ отправлен: 14.12.2006, 11:26