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

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


Информационный Канал Subscribe.Ru

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

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

Выпуск № 137
от 30.05.2005, 14:00

Администратор:Калашников О.А.
В номере:Вопросов: 4, Ответов: 13


Вопрос № 21282: Добрый день! Можно ли в DateTimePicker выделять окружностью (как текущую дату) несколько дней? Ну или как-нить по-другому выделить....
Вопрос № 21304: Добрый день? уважаемые мастера. Есть вопросик. Я уже его задавал, но наверное не так. Есть база на ASA(SyBase) 9. Программа на Delphi 6. Как через ADO или ADOX вытащить все триггера к определенной таблице и сам текст этих триггеров. И также текст...
Вопрос № 21309: Господа, работать с Вами очень приятно, но…. конкретные вопросы требуют конкретных ответов. Особенно для моих “способностей”. Задана строка текста произвольной длины. Подсчитайте количество символов, отличных от пробела во введенной строке и выве...
Вопрос № 21319: Здравствуйте, уважаемые эксперты! Подскажите, пожалуйста, как программно вызвать обработку файлов какой-нибудь командой из контекстного меню Проводника Windows. Ситуация такая: есть программа, которая при установке прописалась в контекстное м...

Вопрос № 21282
Добрый день!
Можно ли в DateTimePicker выделять окружностью (как текущую дату) несколько дней? Ну или как-нить по-другому выделить.
Отправлен: 24.05.2005, 15:55
Вопрос задал: nimoid (статус: 1-ый класс)
Всего ответов отправлено: 2

Отвечает: sir henry
Здравствуйте, nimoid!
Нет, нельзя. Но, если я не ошибаюсь, в Jedi-компонентах такая штука была.
www.torry.net
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 25.05.2005, 08:31
Оценка за ответ: 5
Комментарий оценки:
Скачал Jedi Components, посмотрел - есть LabeledDateTimePicker. Никакой сопровождающей документации нет, сайт разработчика неработает. Глянул в исходник - ничего такого вроде не нашел. :(
Если помнишь как с ним такое провернуть, напиши плз на nimoid AT yandex DOT ru

Отвечает: Jadd
Здравствуйте, nimoid!
Нельзя. В свое время я писал свою компоненту, правда на основе TGrid. Но ничего не мешает написать такую-же как нужная Вам, но с мультиселектом. Могу помочь в реализации.
Ответ отправил: Jadd (статус: 4-ый класс)
Отправлен: 25.05.2005, 10:11
Оценка за ответ: 5
Комментарий оценки:
Я бы с удовольствием, но как написать компонент понятия не имею - ни разу не писал. Можно обсудить это по-подробнее - nimoid AT yandex DOT ru


Вопрос № 21304
Добрый день? уважаемые мастера. Есть вопросик. Я уже его задавал, но наверное не так.
Есть база на ASA(SyBase) 9. Программа на Delphi 6. Как через ADO или ADOX вытащить все триггера к определенной таблице и сам текст этих триггеров. И также текст хранимых процедур и функций. Я вытаскиваю в компонент TreeView все таблицы, представления(View), поля и индексы. Но вот названия триггеров не знаю, как вытащить. И текс этих самых триггеров. Для работы с базой SyBase ASA у них есть свое средство - Sybase Central. Но оно очень громоздкое и ставится вместе с самим SQL сервером. Я хочу в своей программе видать структуру базы. А как изменять триггера, процедуры и функции я умею. Заранее благодарен.
Александр.
Отправлен: 25.05.2005, 02:28
Вопрос задал: sb (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: sir henry
Здравствуйте, sb!
Я Вам уже отвечал на этот вопрос, но наверное не так. :)
1. Изменить текст триггера или хранимой процедуры нельзя, по той причине, что в БД они хранятся не в виде текста. Опять же извиняюсь, но что конкретно происходит по этому поводу в SYBASE я не знаю, может быть в ихней базе они и хранятся в текстовом виде, но в InterBase такого нет (точнее, я этого не знаю :) ).
Следовательно, если процедуры и триггеры хранятся в базе в текстовом виде, то должно быть какое-то средство языка SQL их просмотреть или отредактировать. Именно в диалекте языка SQL самого SYBASE.
2. Как вытащить названия процедур из базы именно с помощью ADO я Вам написал. Как вытащить названия триггеров я не нашел. Изменять текст процедуры, естествено, нужно в том компоненте который для этого предназначен, например в ТМЕМО.
Список триггеров будет получен либо в составе списка процедур, либо с помощью ADO его вообще нельзя получить. Второе по-моему ближе к реальности, т.к. триггеры вручную (в отличие от процедур) не запускаются, а происходят при том или ином событи БД. Следовательно их список, при работе с пользователя с БД, нужен как собаке пятая нога.
Разработчику базы, конечно другое дело, но разработчик сидит на средствах самого SYBASE и Дельфи тут ни при чем.
--------------------------------------------
Что еще можно посоветовать.
Обратитесь к API функциям SYBASE и Вы наверняка найдете там нужные Вам функции. Например, как получить список триггеров.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 25.05.2005, 09:04

Отвечает: Jadd
Здравствуйте, sb!
Я думаю, что ADO не обладает средствами, достаточными для просмотра содержимого объектов базы данных типа Триггера и Процедуры (что одно и то же по сути, но разное по назначению и времени действия). Я бы предложил посмотреть API к серверу базы данных, который вы используете. С большой долей вероятности Вам удастся найти там исчерпывающую информацию.
Ответ отправил: Jadd (статус: 4-ый класс)
Отправлен: 25.05.2005, 10:09


Вопрос № 21309
Господа, работать с Вами очень приятно, но…. конкретные вопросы требуют конкретных ответов. Особенно для моих “способностей”.
Задана строка текста произвольной длины. Подсчитайте количество символов, отличных от пробела во введенной строке и выведите это число на экран.
Вопрос 1. Как прочитать строку S из текстового окна формы и определить ее длину L?
S:= ____
L:= ____
Вопрос 2. Напишите известные вам операторы цикла в языке Object Pascal и выделите тот оператор, который вы считаете целесообразным использовать для просмотра символов строки:
__________________________________________________________
Вопрос 3. Напишите функцию, обеспечивающую преобразование целого числа k в строку и оператор для вывода результата k в поле метки или текстовое окно:
а) Создайте обработчик события от кнопки «Обработка строки». Выведите результат решения во второе текстовое окно.
procedure TForm1.Button1Click (Sender: TObject);
__________________________________________________________
__________________________________________________________
begin
__________________________________________________________
__________________________________________________________
end;
б) Создайте обработчик события для второй кнопки.
Запустите программу и проверьте правильность решения задачи.
с) Попробуйте создать последовательность действий для проверки пустой строки, чтобы не обрабатывать пустую строку.
1. Проверка длины строки:
__________________________________________________________
2. Формирование сообщения о результате проверки.
Вопрос 4 Запишите условный оператор, который позволит подсказать пользователю, что строка не введена:
__________________________________________________________
__________________________________________________________
__________________________________________________________
Шаг д) Дополните обработчик строки проверкой пустой строки.
Вопрос 5 Опишите атрибуты стандартного сообщения об ошибке Messagedlg и их значения:
Отправлен: 25.05.2005, 07:21
Вопрос задал: Петров Василий Владимирович (статус: Посетитель)
Всего ответов отправлено: 8

Отвечает: sir henry
Здравствуйте, Петров Василий Владимирович!
Другими словами, Вы просто переписали сюда карточку с заданиями. :)
Чтобы решить ЗА Вас, необходимы деньги.
Помощь, это когда Вам что-то непонятно и Вы пишете то, что Вы не поняли. А то что Вы написали называется "сделайте за меня...".
Создалось впечатление, что в Дельфи Вы не знаете вообще ничего. Т.е., вместо того, чтобы учиться в выбранном Вами учебном заведении, Вы попивали пивко в компании девочек. В таком случае помогать Вам совершенно бессмысленно и Вам необходимо купить книжку для начинающих по Дельфи, например автора Фаронова "Дельфи 7. Учебный курс".
Надеюсь я вызвал в Вашей душе определенные эмоции. Поверьте те же самые эмоции вызывает и Ваш "вопрос".
Искренне надеюсь, что Вы не обиделись, а засучив рукава взялись за изучение Дельфи. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 25.05.2005, 09:26

Отвечает: Gin
Здравствуйте, Петров Василий Владимирович!
Сам не дальше Вашего ушел, но поддерживаю ответ sir henry. Если у Вас нет возможности РЫТЬСЯ в Интернете - найдите мой ответ на вопрос № 21149. Там маленькая капля из всего что можно найти. Возможно, это поможет. Хорошей учебы Вам!
С Уважением, Gin.
Ответ отправил: Gin (статус: 2-ой класс)
Отправлен: 25.05.2005, 09:52

Отвечает: Jadd
Здравствуйте, Петров Василий Владимирович!
1)НИчего более конкретного, чем учебник по Паскалю нету ;). Ну, хорошо. Вот примеры:
Текстовое окно формы - это TEdit что ли? Тогда проще некуда. Там есть свойство Text. Берем его: mystr := Edit1.Text; Длина вычисляется стандартной функцией Паскаля. Т.е опять же nLength := Length(mystr) или nLength := Length(Edit1.Text); Теперь, как подсчитать символы отличные от пробела:
var
nIndex: Integer;//индекс символа
nCount: Integer;//количество
mystr: String; //считаная строка будет здесь
begin
mystr := Edit1.Text; //берем строку

nCount := 0; //инициализируем счетчик
//далее перебираем символы строки. Напомню, строка - это массив символов, т.е. непрерывная область памяти, заполненная символами
for nIndex:=0 to Length(mystr)-1 do
begin
if mystr[nIndex] = ' ' then
continue //если пробел, идем дальше
else
Inc(nCount); //иначе увеличиваем счетчик
end; //for
end;
Все. Ничего более простого нету.
Едем дальше
2)Это проще будет открыть учебник. Всего их 3: for, while...do, repeat...until
Как видишь, можно использовать любой из них, но в последнем случае есть шанс нарваться на проблему, если строка нулевая. С позиции оптимизации алгоритма по скорости и количеству обращений к памяти, for предпочтительней.
3) Весь вопрос 3 - это одна функция, и очень простая (опять же - учебник по Дельфи)
Ну ладно, надо очки набирать, а то меня скостили за что-то. Держи пример и помни мою доброту ;)
Преобразовать можно несоклькими способами. Механизм RTTI оставим в покое и используем простой пример:
procedure TForm1.Button1Click (Sender: TObject);
var
strMyInt: String;
nNumber: Integer;
begin
//проверяем введена ли строка
if (Length(Edit1.Text) = 0)
begin
//Сообщаем об ошибке
MessageDlg('Строка не введена!', mtError, mbOk, 0);
Exit; //выходим из функции
end;
//если все ок, переводим число в строку. Есть два способа это сделать, возьмем самый простой
//Допустим, число у нас 3
nNumber := 3;
strMyInt := IntToStr(nNumber); //В эту функцию можно и само число передать
//выводим результат в окно
Edit2.Text := strMyInt; //Можно и короче написать, например, Edit2.Text := IntToStr(nNumber);
end;
Как видишь, в этой простой функции перечислены все шаги из твоего вопроса
5) Открываешь хелп по дельфям и читаешь:
Самый простой вариант
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;
Теперь по каждому параметру:
const Msg: string - строка с сообщением
DlgType: TMsgDlgType - тип диалога. Этот параметр указывает какая иконка будет нарисована на диалоге. текст, который появится в заголовке диалога - имя исполняемого файла. Варианты этого параметра:
mtWarning Иконка с предупреждением (желтый такой значек)
mtError Иконка с ошибкой (красный крестик).
mtInformation Иконка с информацией.
mtConfirmation Иконка подтверждения.
mtCustom С таким флагом диалог не будет показывать картинку.
Buttons: TMsgDlgButtons - какие кнопки будут в диалоге. Их варианты:
mbYes A button with 'Yes' on its face.
mbNo A button the text 'No' on its face.
mbOK A button the text 'OK' on its face.
mbCancel A button with the text 'Cancel' on its face.
mbAbort A button with the text 'Abort' on its face
mbRetry A button with the text 'Retry' on its face
mbIgnore A button the text 'Ignore' on its face
mbAll A button with the text 'All' on its face
mbNoToAll A button with the text 'No to All' on its face
mbYesToAll A button with the text 'Yes to All' on its face
mbHelp A button with the text 'Help' on its face
mbYesNoCancel mbYes, mbNo, and mbCancel
mbYesNoAllCancel mbYes, mbYesToAll, mbNo, mbNoToAll, and mbCancel
mbOKCancel mbOK and mbCancel
mbAbortRetryIgnore mbAbort, mbRetry, and mbIgnore
mbAbortIgnore mbAbort, mbIgnore
из представленых констант можно сформировать свои наборы кнопок (например, mbNoAbortCancelIgnore ;) ).
HelpCtx - содержит id того раздела хелпа, который увидит юзверь, если юзверь кликнет на кнопке Help или нажмет F1. Я всегда ставлю 0.
В расширеных вариантах функции есть еще пара параметров:
DefaultBtn - указывает на ту кнопку из определенных в параметре Buttons, которая будет выделена рамочкой - т.е. кнопка по умолчанию, в противном случае никакая не будет выделена.
Bitmap - казатель на свою собственную картинку, которую ты можешь подгрузить в диалог.
Значения, которые функция возвращает зависит от нажатой кнопки. Диапазон значений:
Нажата Значение
mbOk mrOk
mbOK mrOk
mbCancel mrCancel
mbYes mrYes
mbNo mrNo
mbAbort mrAbort
mbRetry mrRetry
mbIgnore mrIgnore
mbAll mrAll
mbNoToAll mrNoToAll
mbYesToAll mrYesToAll
Все. Теперь беги на главную площадь твоего города и ставь мне памятник за самую бесполезную работу - копирование хелпа. Дружище, если хочешь научиться программировать - научись "копаться" сам и как можно больше читать спец. литературы. Особенно, поможет хелп. Дело тут не в умственных способностях, а в желании докопаться до сути САМОМУ. Удачи.
ЗЫ: и не забудь поставить мне 5 за ответ, а то вернусь и покусаю.
Ответ отправил: Jadd (статус: 4-ый класс)
Отправлен: 25.05.2005, 10:03

Отвечает: Александр, П
Здравствуйте, Петров Василий Владимирович!
1.Ответ
legth(s) - функция, возвращает длину строки
chr - возвращает ANSII код символа
ord - возвращает символ по коду
еще нюанс: к строке можно обращаться как к массису!
s, b : string
n, i, c : integer
n=length(s);
for i=1 to n do begin
b := s[i];
if b<> " " then
c:=c+1;
end; {if}
// результат работы в с будет кол-во символов отличных от пробела
Ну собственно пример получился ответом сразу на два первых вопроса
IntToStr - integer в string
FloatToStr - real в string
StrToInt - string в Integer
Str To Float - srting в real
edit1.text := IntToStr(k)
!Проверка на пустоту строки!
b : boolean
b= true
if length(trim(s))=0 then begin
b:=false
application.messagebox("n строка не заполнена", "Ошибка", mb_Ok+mbIconError);
edit1.SetFocus;
end;
А описания в исходных текстах набираешь нужное значение (application.messagebox, например) и нажимаешь F1! Мне помогает!
Ответ отправил: Александр, П (статус: 1-ый класс)
Отправлен: 25.05.2005, 13:05

Отвечает: Ujin Antikvar
Здравствуйте, Петров Василий Владимирович!
Узанть кол-во символов отличных от пробела можно узнать многими способами я приведу вам один из способов:
//Пример1
Procedure TForm1.Button1Click(Sender: TObject);
var
s:string[255];
i,j,n:integer;
begin
s:=Edit1.Text; //Ввод строки в программу
j:=Length(s); //Просчитываем кол-во элементов
if j=0 then //Проверяем введена ли строка если нет то выдаем сообщение о необходимости ввести строку
begin
ShowMessage('***Ваше сообщение***');
exit;
end;
n:=0; //n - будет кол-вом пробелов в строке
//Открываем цикл и проверяем есть ли в строке пробелы
for i:=1 to j do
begin
if s[i]=' ' then
begin
n:=n+1;
end;
end;
//Теперь на известно кол-во пробелов и мыможем узнать кол-во символов отличных от пробела
i:=j-n;
Edit2.Text:=IntToStr(i);
end;
Ответ на вопрос №1
Прочитать строку с формы можно по разному в зависимости от используемого компонента.
Например:
1. S:=Edit1.Text; //Считывает строку из Edit'a
2. S:=Memo1.Lines.Add[i-1][j]; //Считываем строку из мемо, аналогично и для RichEdit'a
3. S:=StringGrid1.Cells[j,i]; //Считываем строку из StringGrid'a (таблицы)
Проверить длину строки можно такими функциями
1. Length
2. Memo1.Lines.Count;
Ответ на вопрос №2
Операторы цикла;
1. for i:=1 to m do //оператор цикла работающий с данными в деапозоне от 1 до m - какое-то целое число. i и m должны быть обязательно целыми числами так как данный оператор работает только с целыми числами.
Его еще можно объявлять и так "for m downto i do" оператор будет работать в обратном режиме тоесть от последнего злемента данных к первому
2, While <логическое выражение> do
begin
<блок операторов>
end;
Данный оператор цикла работает в таком стиле. Пока логическое выражение будет верно он будет выполнять блок операторов, и как только оно становится неправдой он прекрашает работу.
3, Repeat
<блок операторов>
Until <логичекое выражение>
Даные оператор работает так: Пока логическое выражение неправда он работает но как только оно становится правдой он прекрашает работу. Одна особенность данного оператора состоит в том что если сразу логическое выражение стало правдой он всеравно один раз выполнится этим он и отличается от опратора цикла While.
Но и этим он не очень хорош в некоторых случая просчета. поэтому надо смотреть что лучше пставить Repeat или While.
Ответ на вопрос №3
Перевод строки в целое число и обратно происходит с помощью следующих функций
1. StrToInt(k) - Перевод k из строки в целое число
2. IntToStr(k) - Перевод k из целого числа в строку
Вывод строки в текстовое окно осуществляется так

1. Edit1.Text:=k //Вывод в Edit
2. Memo1.Lines.Add(k) //Вывод в Memo, аналогично и для RichEdutt'a (вместо Memo1 пишем RichEdit1)
ответы на пункты вопроса №3 в примере1
Ответ на вопрос №4
Можно выдать сообщение, можно написать на форме в Label
1 ShowMessage('Строка пустая ')
C Ув. Ujin Antikvar
Ответ отправил: Ujin Antikvar (статус: 1-ый класс)
Отправлен: 25.05.2005, 23:03

Отвечает: Stamm
Здравствуйте, Петров Василий Владимирович!
1) S:=Edit1.text;
L:=Length(S);
2) var i:integer;
Begin
For i:=1 to L do
s[i]{ каждый символ}
3) IntToStr(k)
Ответ отправил: Stamm (статус: 3-ий класс)
Отправлен: 26.05.2005, 11:05

Отвечает: AWS
Здравствуйте, Петров Василий Владимирович!
Это как я понял какой-то тест.
Так что уважаемый Петров Василий Владимирович чужими мозгами гением не станешь,
а по симу читайте литературу и обучайтесь.
Ответ отправил: AWS (статус: 1-ый класс)
Отправлен: 27.05.2005, 20:41

Отвечает: Polesov Alexandr
Здравствуйте, Петров Василий Владимирович!
Я думаю, что вы вообще не знакомы с языком и только по этому отвечтать на этот вопрос просто глупо...
Советую обратиться к литературе и тогда таких вопросов возникать не будет...=))
Ответ отправил: Polesov Alexandr (статус: 1-ый класс)
Отправлен: 28.05.2005, 12:36


Вопрос № 21319
Здравствуйте, уважаемые эксперты!
Подскажите, пожалуйста, как программно вызвать обработку файлов какой-нибудь командой из контекстного меню Проводника Windows.
Ситуация такая: есть программа, которая при установке прописалась в контекстное меню Проводника и теперь для обработки файлов этой программой нужно выделять эти файлы в Проводнике, выбирать эту команду и после этого файлы будут обработаны.
Но иногда файлов слишком много,в разных каталогах, а программа не умеет работать с каталогами. Хотя группу файлов в одном каталоге она обрабатывает.
Возможности обратиться к разработчику программы для доработки нет.
В документации на программу про использование ее с внешними программами ничего не сказано.
Сама программа представляет собой кучу dll-файлов.
Вот я и хочу написать программу, которая обрабатывает все выбранные пользователем каталоги по очереди.
Отправлен: 25.05.2005, 13:07
Вопрос задал: Alexandr (статус: 2-ой класс)
Всего ответов отправлено: 1

Отвечает: sir henry
Здравствуйте, Alexandr!
Вы забыли написать, каким образом Ваша программа должна файлы обрабатывать или, хотя бы, каким образом она их принимает на обработку.
Например, в случае открытия текстового файла блокнотом строка "обработки" будет выглядеть так:
ShellExecute(0, "open", "notepad.exe","текстовый_файл","Рабочий_каталог",SW_SHOW);
Следовательно Ваша задача в этом случае, правильно указать текстовый файл который будет открываться блокнотом.
Если Ваша "обработка" выполняется по тому же принципу, то Вам небходимо, вместо "текстовый_файл" поставить Вашу строку со списком файлов.
Если файлы разбросаны по разным каталогам, то эту строчку целесообразно сначала записать в текстовом файле, потом этот текстовый файл открыть, считать строку и подставить ее в четвертый параметр функции ShellExecute(). Вместо "notepad.exe", естествено, Вы должны подставить название Вашей программы.
Если в строке параметров
Если же под словом "обработка" Вы имели в виду что-то другое, то тогда Вам следует об этом толково написать экспертам. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 26.05.2005, 06:38


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

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

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

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

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


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


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное