Выпуск № 1411 от 28.07.2009, 13:05
Администратор рассылки: Калашников О.А., Руководитель
В рассылке: подписчиков - 564, экспертов - 196
В номере: вопросов - 2, ответов - 4
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
Вопрос № 170696: Здравствуйте уважаемые эксперты!!! Подскажите пожалуйста, есть ли в Delphi 7 Enterprise, компонент, с помощью которого можно реализовать на форме меню с вкладками, что-то похожее на панель с компонентами в среде Delphi. Если есть такое - под...
Вопрос № 170708: Здравствуйте уважаемые эксперты! Помогите пожалуйста с такой задачкой, проект не нужен, главное код :) Есть строка TEMP = 159160161162163164165166167 и т.д. и переменная Key целого типа, которая хранит число, например 12, мне нужно каждую т...
Вопрос № 170696:
Здравствуйте уважаемые эксперты!!! Подскажите пожалуйста, есть ли в Delphi 7 Enterprise, компонент, с помощью которого можно реализовать на форме меню с вкладками, что-то похожее на панель с компонентами в среде Delphi. Если есть такое - подскажите пожалуйста как работать с компонентом. Спасибо!
Это вроде обычный TPageControl на вкладке Win32. Для создания новой вкладки в дизайнере -> Правой кнопкой мыши на компоненте -> New Page Для создания в Run-Time код в приложении
#thank 252483
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает VolRus, 5-й класс :
Здравствуйте, Николай // Programmator . Немного усовершенствовал ответ Александр Романов [Alexo] Добавил динамическое создание кнопок.
uses ..., ComCtrls, Buttons; ... public procedure SpeedButtonClick(Sender: TObject); end; ... procedure TForm1.Button1Click(Sender: TObject); var tab : TTabSheet; i : integer; begin tab:=TTabSheet.Create(Form1); tab.PageControl:=PageControl1; tab.Caption:='New';
for i:=0 to 4
do //количество кнопок на закладке with TSpeedButton.Create(tab) do begin parent:=tab;//присваиваем родителя кнопке left:=width*i; PageControl1.Tag:=PageControl1.Tag+1;//количество кнопок увеличиваем на единицу Name:='SpeedButton'+inttostr(PageControl1.Tag); //называем кнопку caption:=inttostr(PageControl1.Tag);//надпись на кнопке OnClick:=SpeedButtonClick;//присваиваем событие end; end;
//обработка нажатия на кнопку procedure TForm1.SpeedButtonClick(Sender: TObject); begin if (Sender is TSpeedButton) then form1.Caption:=TSpeedButton(Sender).Name;//получаем имя нажатой кнопки end;
Ответ отправил: VolRus, 5-й класс
Ответ отправлен: 22.07.2009, 17:48
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 252484
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 170708:
Здравствуйте уважаемые эксперты! Помогите пожалуйста с такой задачкой, проект не нужен, главное код :)
Есть строка TEMP = 159160161162163164165166167 и т.д. и переменная Key целого типа, которая хранит число, например 12, мне нужно каждую тройку символов начинаня с 159 и т.д. перевести в целый тип и прибавить к этому целому числу значение Key, т.е. 12 и все это потом сохранит в новую строку или же обратно в TEMP (нет разницы).
Например если на входе строка: 159160161, то на выходе должно
получится 171172173...
Я попробовал сделать так:
//... For I := 1 to Length(Temp) do begin CurrSymb := Copy(Temp, K, (K + 2)); Temp := Temp + IntToStr(StrToInt(CurrSymb) + Key); K := K + 3 ; end; //...
На первый взгляд должно работать, но не работает. В результате ошибка конвертации. Пробовал с помощью дополнительных переменных, хоть и без ошибок, но строку тогда получаю с "мусором". Пом
огите пожалуйста:)
Отвечает Gh0stik, Модератор :
Здравствуйте, Николай // Programmator .
Начнем с самого главного - цикла (For I := 1 to Length(Temp) do), сколько он раз выполнится все для той же самой строки 159160161?
Легко посчитать, что выполниться он ровно 9 раз. А теперь посчитайте значение переменной k, при i=6... Очевидно, что ее значение будет равно k+15, а это заведомо больше длины исходной строки. Подумайте, что будет храниться в переменной CurrSymb? Использовать саму же переменную Temp для хранения результата
можно но не так быстро!!! Поскольку в строке CurrSymb := Copy(Temp, K, (K + 2)); Вы используете при каждом последующем вызове цикла уже иную строку Temp - присмотритесь внимательно!
Посему рекомендую использовать для таких нужд цикл с предусловием (while), вот один из возможных вариантов:
Код:
var NewTemp:string; .... k:=1; NewTemp :=''; while k+2<=length(temp) do begin CurrSymb := Copy(Temp, k, 3); NewTemp := NewTemp + IntToStr(StrToInt(CurrSymb) + Key); k := k + 3 ; end;
И опять же НЕ забывайте, что данный код актуален для строк длина которых кратна 3.
Good Luck!
Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) Адрес сайта:http://gh0stik.rusfaq.ru/ ICQ # 289363162
----- Непечатный жаргон - это тот язык, которым решительно все программисты владеют в совершенстве.
Ответ отправил: Gh0stik, Модератор
Ответ отправлен: 23.07.2009, 00:12
Оценка ответа: 5 Комментарий к оценке: Спасибо Вам!!! Код я чесно говоря набирал на " быструю руку", вот и недосмотрел :) Спасибо Вам ещё раз!!!!!!
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 252504
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает VolRus, 5-й класс :
Здравствуйте, Николай // Programmator . В данном примере как мне кажется есть небольшая не точность. Если в первый из трех символов 0 то тогда приведенный код будет возвращать строку короче на один символ для каждой строки из трех символов. Например если '059' --> 59 если '009' --> 9
Нужно использовать вместо: NewTemp := NewTemp + IntToStr(StrToInt(CurrSymb) + Key); так NewTemp := NewTemp + Format('%.3d', [StrToIntDef(CurrSymb,0) + Key ]);
Ответ отправил: VolRus, 5-й класс
Ответ отправлен: 23.07.2009, 10:07
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 252512
на номер 1151 (Россия) |
Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Нам очень важно Ваше мнение об этом выпуске рассылки. Вы можете оценить этот выпуск по пятибалльной шкале, пройдя по ссылке: оценить выпуск >>
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.