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

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


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

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

Выпуск № 889
от 08.08.2007, 19:35

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


Вопрос № 97143: Ув. эксперты. Скажите пожалуста, как пишется процедура открытия файла. также скажите плизз как пишется процедура удаления папки и процедура перезагрузки Windows. 3аранее огромное спасибо всем за ответы 5!...
Вопрос № 97159: Доброго времени суток уважаемые эксперты не подскажите, как можно преобразовать строку string в массив integer. str:=Memo1.Text отсюда беру строку. StrtoInt ругаеться...
Вопрос № 97204: Уважаемые эксперты возник вопрос. у меня есть форма созданная в дизайнере, на ней PageControl c TabSheet'ami и есть Frame созданный тоже в дизайнере, мне нужно в рантайме прилепить этот фрейм к одному из листов PageControl'a как это сделать ?...
Вопрос № 97228: Здравствуйте уважаемые эксперты. Параметр формы Borderstyle="bsNone." (это необходимо для внешнего вида) Как сделать так чтобы вид остался тот же и появлось возможность менять размер форты так как это происходит когда Borderstyle="bsSizeabl..."
Вопрос № 97266: Пишу серьезную программу и хочется сделать для нее хороший интерфейс. Вот ищу компоненты-скины. Подскажите какие из них известны Вам и по возможности расскажите о их преимуществах. Можно и платные, но не чересчур дорогие (до 30-40$)....

Вопрос № 97.143
Ув. эксперты. Скажите пожалуста, как пишется процедура открытия файла. также скажите плизз как пишется
процедура удаления папки и процедура перезагрузки Windows. 3аранее огромное спасибо всем за ответы 5!
Отправлен: 02.08.2007, 20:36
Вопрос задал: Патрикеев Сергей (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Градов Юрий Михайлович
Здравствуйте, Патрикеев Сергей!
1. Пример удаления папки со всем содержимым в приложении (взято из DelphiWorld).
2. Перезагрузка с закрыванием всех процессов, также взята из DelphiWorld

Приложение:

---------
Глаза боятся - руки делают!

Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 02.08.2007, 20:58
Оценка за ответ: 5


Вопрос № 97.159
Доброго времени суток уважаемые эксперты не подскажите, как можно преобразовать строку string в массив integer.
str:=Memo1.Text отсюда беру строку. StrtoInt ругаеться
Отправлен: 02.08.2007, 23:47
Вопрос задал: Lexa82 (статус: 1-ый класс)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Omickron
Здравствуйте, Lexa82!

Тип integer определён в Delphi как int32. Т.е. 32 разрядное целое число. Я полагаю, в строке Memo1.Text записано число, большее, чем может вместить в себя integer. Поэтому и генерируется исключение. Кроме того, эта функция не делает массив, а Вам нужен именно массив целых чисел. (преобразовать строку string в массив integer)

Попробуйте организовать цикл:
var mas:array of integer;
i:integer;
......
for i:=1 to Length(Memo1.Text) do
begin
Length(mas):=Lengt(mas)+1;
mas(High(mas)):=StrToInt(Memo1.Text[i]);
end;
Этот код можно улучшить:
во-первых, везде, где есть преобразования чисел в строки и наоборот, этот код нужно заключать в блок try-except (try-finally);
во-вторых, лучше завести строку s:string, в которую сразу записать строку из Memo1.Text. Это связано с тем, что на обращение к компоненту Memo1 и его свойству Text уходит больше времени и системных ресурсов, чем просто к статической строке.
Надеюсь, я Вам помог. Удачи.
Ответ отправил: Omickron (статус: 3-ий класс)
Ответ отправлен: 03.08.2007, 00:25
Оценка за ответ: 4

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

Отвечаю на уточненный в минифоруме вопрос: "мне необходимо перевести выражение типа: 00 0A 1F 00 и.т.д. в массив типа byte".
Функция ConvertHex (ее код в приложении) преобразует последовательность шестнадцатиричных чисел в последовательность десятичных чисел. Числа помещаются в динамический массив.
Есть и ограничения у функции ConvertHex:
строка не должна содержать других символов кроме пробела (в любых количествах), цифр и символов A - F в любом регистре (A/a);
все шестнадцатиричные числа должны состоять из двух символов (не больше и не меньше).
Если нужно усовершенствовать функцию или что-то не понятно, то пишите в минифорум.
Удачи.

Приложение:

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

Отвечает: Виктор Пырлик
Здравствуйте, Lexa82!

Ваша задача, это анализатор строки. Простая по определению, но не по сути. Дело в том, что, алгоритм разбора строки может быть разным. На мой взгляд, оптимальный является работа с памятью по маске – т.е. с указателем на память, где размещен наш массив символов. Смещая «окно» - маску, мы забираем искомые данные, в нашем случае – числа. В приложении приведен код. Это просто пример возможного направления реализации. Основное на что в данном примере надо обратить внимание – на то, что работа ведется с одной строкой. Компонент TMemo – многострочный, следовательно, если надо анализировать несколько строк, надо просто в цикле их перебрать, или, получить указатель на Memo1.Text, тогда, можно сразу работать со всем массивом но делать проверку на управляющие символы. Код рабочий и прокомментирован. Если есть вопросы – спрашивайте.
PS: конечно надо обрамлять такой код в защищенный блок try...except

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 03.08.2007, 01:52

Отвечает: Bee.line
Здравствуйте, Lexa82!
Попробуйте RealToInt или VarToInt. И обратите внимание какой знак отделяет дробную часть числа (точка или запятая)
Ответ отправил: Bee.line (статус: 1-ый класс)
Ответ отправлен: 03.08.2007, 07:32
Оценка за ответ: 3
Комментарий оценки:
Вы когда отвечаете читайте внимательно

Отвечает: Mishell
Здравствуйте, Lexa82!
Смотрите пример в приложении - в нем все числа из строки для наглядности заносятся в ListBox1 (Вам же надо будет заносить их в ваш массив - вместо ListBox1.Items.Add...), ну а все нечисловые значения соотв. пропускаются.

Приложение:

Ответ отправил: Mishell (статус: 4-ый класс)
Ответ отправлен: 03.08.2007, 10:34

Отвечает: Дмитрий С.
Здравствуйте, Lexa82!
Не всё сразу, друг мой :) советую "переделывать" не всё сразу, а поэлементно, т.е. каждый item (string) отдельно.
---------
Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 3-ий класс)
Ответ отправлен: 03.08.2007, 14:23

Отвечает: Балацкий Александр Михайлович
Здравствуйте, Lexa82!
Уточните вопрос: как у вас расположены числа в Memo1.

Вариант1 (массив байт):

var i: integer;
mb: array [1..x] of byte;
s: String;
...
s := Memo1.Text;
For i:= 1 to Length(s) do mb[i]:=Odr(s[i]);

Вариант 2 (Если в каждой строке Memo1 находится целое число):

var mi: array [1..x] of integer;
i, p: integer;
...
If Memo1.Lines.Count > 0 Then
For i:=0 to Memo1.Lines.Count -1 Do
Val(Memo1.Lines[i],mi[i],p);



---------
Еще не один гений не создал того, что не сломал бы другой
Ответ отправил: Балацкий Александр Михайлович (статус: 1-ый класс)
Ответ отправлен: 04.08.2007, 12:18


Вопрос № 97.204
Уважаемые эксперты возник вопрос.
у меня есть форма созданная в дизайнере, на ней PageControl c TabSheet'ami и есть Frame созданный тоже в дизайнере, мне нужно в рантайме прилепить этот фрейм к одному из листов PageControl'a как это сделать ?
Отправлен: 03.08.2007, 11:38
Вопрос задал: Кэр Лаэда (статус: Студент)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Виктор Пырлик
Здравствуйте, Кэр Лаэда!

Создано 2 фрейма и на главной форме лежит
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;

В конструкторе формы подгружаем фреймы, это можно делать и в процессе работы приложения.
Код в приложении…

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 03.08.2007, 12:17
Оценка за ответ: 5
Комментарий оценки:
Похоже на правду, я сделал так

frameObs:=TframeObsczie.Create(aOwner);
frameObs.Parent:=frm.cxPageControl1.Pages[0];

Отвечает: Delph
Здравствуйте, Кэр Лаэда!

Попробуйте свойству Parent присвоить тот TabSheet, который Вам нужен, примерно так:

Frame1.Parent := TabSheet1;

Честно говоря, я этот приём попробовал с GroupBox, и всё получилось на ура.
Ответ отправил: Delph (статус: 5-ый класс)
Ответ отправлен: 03.08.2007, 12:21
Оценка за ответ: 5
Комментарий оценки:
Ок вроди получилось но чуть подругому.

Отвечает: Mishell
Здравствуйте, Кэр Лаэда!
см. пример в приложении
само-собой есть форма Form1, на ней PageControl1 и внем страница TabSheet1, а также есть фрэйм MyFrame

Приложение:

Ответ отправил: Mishell (статус: 4-ый класс)
Ответ отправлен: 03.08.2007, 12:22
Оценка за ответ: 5
Комментарий оценки:
Ага пасиба, вроди так и получилось

Отвечает: Shveps
Здравствуйте, Кэр Лаэда!
Это можно сделать "докованием". Для этого существует метод у подобных компонентов и объектов : ManualDock(NewDocSite: TWinControl; DropControl: TControl = nil; ControlSide: Tallign = alNone): boolean, где:
NewDocSite - приемник;
DropControl - другой компонен в приемнике, который должен разместить данного клиента;
ControlSide - выравнивание докуемого клиента.
---------
Пиво ф топку !!! Водку Тоже !!!
Ответ отправил: Shveps (статус: 6-ой класс)
Ответ отправлен: 05.08.2007, 08:58


Вопрос № 97.228
Здравствуйте уважаемые эксперты.
Параметр формы Borderstyle="bsNone." (это необходимо для внешнего вида)
Как сделать так чтобы вид остался тот же и появлось возможность менять размер форты так как это происходит когда Borderstyle="bsSizeable."
Отправлен: 03.08.2007, 13:44
Вопрос задал: Левадный Тимур Русланович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Примак Руслан Николаевич
Здравствуйте, Левадный Тимур Русланович!

Я предлагаю сделать ручной обработчик. См. пример кода:

Приложение:

Ответ отправил: Примак Руслан Николаевич (статус: 3-ий класс)
Ответ отправлен: 03.08.2007, 15:17
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо


Вопрос № 97.266
Пишу серьезную программу и хочется сделать для нее хороший интерфейс.
Вот ищу компоненты-скины.
Подскажите какие из них известны Вам и по возможности расскажите о их преимуществах.
Можно и платные, но не чересчур дорогие (до 30-40$).
Отправлен: 03.08.2007, 19:25
Вопрос задал: Louken (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Coupler
Здравствуйте, Louken!
Перепробовал много, но мне больше всего нравятся AlphaControls (выглядят наиболее серьезно, хорошо продуманы). В них практически для всех контролов есть свои, с использованием скинов. C этой страницы вы можете скачать бесплатную версию для жителей бывшего союза (без исходников, но полнофункциональную).
Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 03.08.2007, 19:34

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

Я использую Raize Components. Очень большой выбор всяких интерфейсных штучек, позволяют вертеть текст в разные стороны и выдавливать как хочешь.
Хорошая замена библиотеке RxLib_2.5.
Можно построить красивое меню.

---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 03.08.2007, 19:35

Отвечает: Балацкий Александр Михайлович
Здравствуйте, Louken!
Нарисуйте. Поместите на форму Image1: TImage. Поместите Image1 ниже всех компонентов.

Image1.Align := alClient;
Image1.Pictue := 'C:\%ваш рисунок%.bmp';
Image1.Stretch := true;
Form1.BorderIcon := [biSystemMenu, biMinimize];
Form1.BorderStyle := bsNone; //Не забудтье придумать какой нибудь способ
//закрытия программы

При необходимости сделать окно программы не прямоугольной формы. Используйте к примеру черный цвет в изображении для участков прозрачности.

Form1.TransparentColor := true;
Form1.TransparentColorValue := clBalck;
Form1.Color := clBlack;
Image1.Transparent := true;

---------
Еще не один гений не создал того, что не сломал бы другой
Ответ отправил: Балацкий Александр Михайлович (статус: 1-ый класс)
Ответ отправлен: 04.08.2007, 11:57


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

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

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

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

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


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


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

В избранное