Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: akaGM
Дата сообщения: 14.04.2008 20:26
ALPeresvet

Цитата:
Всё дело происходит в теле одной процедуры, с использованием GoTo...
что после каждого возвращения на вышестоящую метку

всё дело в том, что ты вышестоящую нижеследующую метку поставил в другой процедуре, совсем в другом файле и вообще на другом компе...

правда хороший ответ?
а ты как думал, что тут, телепаты что ли сидят?
давай код своей процедуры...
Автор: ALPeresvet
Дата сообщения: 14.04.2008 21:44
Дык, длинная она очень, но в общем вот обрезок...

procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
.........................
Label LPodrez;

begin
LPodrez:

TFMezhUgol:= StrToFloat(EMezhUgol.Text);
TFbw1:= StrToFloat(Ebw1.Text);
TFmu:= StrToFloat(Em.Text);
TFz1:= StrToInt(EZ1.Text);
TFz2:= StrToInt(EZ2.Text);
TFU:= TFz2/TFz1;
TFa:=20;


Raschet_bi(TFmu,TFbw1, TFMezhUgol, TFb1, TFb2, TFbw2);
GradMinSec(TFb1,Gb1,Mb1,Sb1);
GradMinSec(TFb2,Gb2,Mb2,Sb2);

GradMinSec(TFbw1,Gbw1,Mbw1,Sbw1);
GradMinSec(TFbw2,Gbw2,Mbw2,Sbw2);

........


if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);
goto LPodrez;
until TFOPodrez = True;
end;
Автор: Frodo_Torbins
Дата сообщения: 14.04.2008 21:54
mazutka
А броадкасты разве пройдут за пределы данного сегмента сети? Обычно адрес сервера всегда в настройки выносят.
ALPeresvet
Ну введите еще одну переменную, что диалог уже выводился. А вообще с Label-ами надо осторожнее.
Автор: akaGM
Дата сообщения: 14.04.2008 22:05
ALPeresvet


Цитата:
длинная она очень

а для таких есть тег {more}


Цитата:
и неудовлетворении условия

ну и где это условие? где, вообще, эта TFmu вычисляется/задаётся, кроме как каждый раз из ТEdit'a берётся?
чё-то у тебя, парень, с логикой исполнения не того...
загони проверку чего-то_там_своего _внутрь_ итерационной процедуры и уже там следи за каким-нибудь глобальным флагом типа tryAutomaticCorrection, а его повесь на чекбокс/радиобуттон...
без всякого зацикливания, да ещё и на основе goto не к ночи помянутого...

+

тем более, что в твоём исполении запрос в
if application.MessageBox()
при прохождении по циклу будет задаваться _всегда_

Автор: ALPeresvet
Дата сообщения: 14.04.2008 22:15
akaGM

Цитата:
ну и где это условие? где, вообще, эта TFmu вычисляется/задаётся, кроме как каждый раз из ТEdit'a берётся?

TFmu не вычисляется - это коэффициент, влияющий на последующие вычисления самым непосредственным образом, но это к делу не относится.Frodo_Torbins
Frodo_Torbins
А можно поподробнее на счёт того, что диалог уже выводился? Как называется событие?

Автор: akaGM
Дата сообщения: 14.04.2008 22:31
ALPeresvet

Цитата:
А можно поподробнее на счёт того, что диалог уже выводился? Как называется событие?


Цитата:
Ну введите еще одну переменную, что диалог уже выводился.


не событие, а доп. флаг... булев...
читай внимательнее...
Автор: ymg2000
Дата сообщения: 14.04.2008 23:20
ALPeresvet
1. Забудь, что есть такой оператор Goto.
2. Оформи
Цитата:

....
TFMezhUgol:= StrToFloat(EMezhUgol.Text);
TFbw1:= StrToFloat(Ebw1.Text);
TFmu:= StrToFloat(Em.Text);
........
GradMinSec(TFbw1,Gbw1,Mbw1,Sbw1);
GradMinSec(TFbw2,Gbw2,Mbw2,Sbw2);

........

как внутреннюю процедуру, например Proc1.
3.
В теле обработчика что-то вроде этого:
....
Proc1(...);

Цитата:

if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);

goto LPodrez;
Proc1(...);

Цитата:
until TFOPodrez = True;





Добавлено:
Не забудь в Proc1 анализировать TFOPodrez.
Автор: Dimoniusis
Дата сообщения: 15.04.2008 07:58
mazutka если локальный чат, то обычно используют Mail Слоты - оно в сегменте сети работает бродкастом без выделенных серверов. Если же полноценно делать - то настройка адреса сервера есть в клиенте. Как и порта и, по желанию, прокси. Ты себе представляешь регулярный спам ICQ.com например? На весь интернет чтоли он будет спамить?
Автор: mazutka
Дата сообщения: 15.04.2008 09:18
Dimoniusis
А Mail Слоты работают в пределах одного сегмента сети?
Да я так и делаю...работаю с serversocket и clientsocket...настраиваю всех клиентов на определенный IP, порт...но а если сервак запустят на другой машине, что всех клиентов перенастраивать надо? Поэтому и задание такое, что на любом компе м.б. запущен сервак при условии, что он ещё не был где нить запущен...и всем клиентам, кот. хотят к нему присоединиться он отправляет свой IP. Пока делаю это через UPD...

Frodo_Torbins
Ну вот обычный пользователь откуда он знает где сейчас запущен сервер, а тем более какой у сервера IP. Мне надо что бы сервер сам автоматически всем присылал свои настройки.
Автор: Maks150988
Дата сообщения: 15.04.2008 10:15
Здраствуйте. Есть примерный массив:
StrTxtBit : array [0..2] of PChar = ('128 kbps', '192 kbps', '320 kbps');
Но для полнейшей локализации приложения хотелось бы загружать строчки для этого массива из ресурсов. Искал реализацию в поисковых системах, но такого даже и нет... Сначала подсовывал просто константу resourcestring вместо 'блаблабла', но компилятор ругался про несовместимость типов, потом чего только не делал... Подскажите пожалуйста это вообще осуществимо?
Автор: Jokerjar79
Дата сообщения: 15.04.2008 10:42
Maks150988, чтоб компилятор не ругался про несовместимость типов, объяви массив не Pchar'ов, а string'ов. А если нужен именно массив Pchar'ов, то инициализируй вручную

StrTxtBit[0] := Pchar(resstr0);
StrTxtBit[1] := Pchar(resstr1); ...
Автор: tishkir
Дата сообщения: 15.04.2008 13:54
Добрый день.
Вопрос простейший, туплю третьи сутки.
Есть DBGrid с возможностью редактирования ячеек. Щёлкаем по ячейке. Она подсвечивается. Щелкаем еще раз. Она входит в режим редактирования и в ней появляется курсор. Как отследить это событие ?
Автор: Maks150988
Дата сообщения: 15.04.2008 17:24
Jokerjar79
Спасибо. Пришлось немного подкорректировать далог с настройками из-за того что мне нужно было подсовывать для некоторых значений одну цифру, которую я потом через Format вставлял в строку. Код с инициализацией массива вставил в начало программы. И вот если всего лишь число для значения массива было с одной цифрой, то программа не запускалась. Я не знаю из-за чего это так...
И еще вот хотел узнать... Есть код:

Код:
type
TMenuItem = record
text : PChar;
bmp : HICON;
end;
var
MenuItems : array [1..19] of TMenuItem =
(
(text : PChar('Str'); bmp : 0),
(text : PChar('Str'); bmp : 0),
(text : 'Str'; bmp : 0)
=========================
);
Автор: Frodo_Torbins
Дата сообщения: 15.04.2008 18:11
mazutka
Если в пределах одного сегмента работаете, то можно и так. Хотя в таком случае сервер не обязателен.
Автор: mazutka
Дата сообщения: 16.04.2008 03:25
Frodo_Torbins ну щас доделаю и тестану в полном размере)))
пасиб за советы)
Автор: Dimoniusis
Дата сообщения: 16.04.2008 07:47
mazutka да Мейл слоты работают броадкастом в текущем сегменте сети.

Насчет второго сервера - в том же ICQ можно запускать в инете кучу серверов - и они не отнимают клиентов друг от друга. Можно наоборот связать сервера в свою сеть - чтобы повысить надежность например Если надо по TCP/IP - ну можно попорбовать в фоновом потоке устроить флуд UDP пакетиками мелкими по текущей подсетке, с данными что "мол тут новый сервер"... Правда если подумать, то любой человек-юзер запустивший на своей машине сервер тут же перенаправит всех клиентов на себя с нормального сервера (ну при боевом использовании). Можно опять же мейлслотом сообщить.
Автор: mauar
Дата сообщения: 16.04.2008 09:40
Как в TMemo загрузить таблцу или рисунок из MS Word?
Автор: Czechoslovak
Дата сообщения: 16.04.2008 10:19

Цитата:
Как в TMemo загрузить таблцу или рисунок из MS Word?

С киких эт пор TMemo уже может отображать таблицы и рисунки ???
Автор: mauar
Дата сообщения: 16.04.2008 10:22

Цитата:
Цитата:Как в TMemo загрузить таблцу или рисунок из MS Word?

С киких эт пор TMemo уже может отображать таблицы и рисунки ???


А что можно сделать? Как вообще на форму поместить документ Word?
Автор: lavren
Дата сообщения: 16.04.2008 10:59
mauar
TRichEdit

Добавлено:
mauar
http://delphiworld.narod.ru/base/delphi_and_wordbasic.html
http://delphiworld.narod.ru/base/delphi_and_word_ole_automation.html
http://delphiworld.narod.ru/base/ins_rtf_to_msword.html
Автор: Czechoslovak
Дата сообщения: 16.04.2008 11:15
Можно использовать сам Word через OLE
Автор: mazutka
Дата сообщения: 16.04.2008 14:10
Dimoniusis
Спасиб тебе большое) когда тема пойдет на диплом) обязательно об этом подумаю)
а пока сделаю через UPD) пусть рассылает всем свои настройки....
ещё раз благодарю)
Автор: ALPeresvet
Дата сообщения: 16.04.2008 20:07
Здравствуйте. Не ругайте новичка, но я уже трое суток не могу решить проблему цикла с возвращением на метку. Дело в том, что в случае нудовлетворительного результата вычислений выдаётся сообщение с предложением исправить ошибки автоматически, но после каждого возвращения на вышестоящую метку и неудовлетворении условия при очередной итерации - опять выдаётся это сообщение:

Цитата:
if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);
goto LPodrez;
until TFOPodrez = True;

Как мне сделать, чтобы откат TFmu, например с 1.00 до 0.25 проходил в тихом режиме, и не выскакивало сообщение при каждом последующем TFmu:= TFmu - 0.01;

Очень нужна ваша помощь. Диплом стоит из за этого GoTo, а по-другому я что-то никак не соображу.

Вот полный код обработчика:
(извините, если громоздко получится...)

[more]procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
TFb1,TFb2,TFbw2,
modul,TFmu,
TFat1,TFat2,TFda1,TFda2,
TFawt1,TFawt2,TFCE,TFa,
TFaa1,TFaa2,TFrb1,TFrb2,
TFbb1,TFbb2,TFaw,TFSIa1,TFSIa2,TFU,
TFmt1,TFmt2,TFx1max: real;

TFal1,TFal2,TFap1,TFap2: double;

TFz1,TFz2,
Gap1,Map1,Sap1,
Gap2,Map2,Sap2: Integer;

TrebKPer,RaspPolus,OPodrez1,OPodrez2,
KPerekr,OInterf1,OInterf2,
OZaostr1,OZaostr2: string;
TFFlagPolusa,TFFlagObrabotki: Boolean;

Label LPodrez;

begin
LPodrez:

TFMezhUgol:= StrToFloat(EMezhUgol.Text);
TFbw1:= StrToFloat(Ebw1.Text);
TFmu:= StrToFloat(Em.Text);
TFz1:= StrToInt(EZ1.Text);
TFz2:= StrToInt(EZ2.Text);
TFU:= TFz2/TFz1;
TFa:=20;

If TFmu > 1.031 then
begin
application.MessageBox
('Значение будет исправлено на максимально допустимое.',
'Превышено максимальное значение коэффициента несовпадения',
MB_OK+MB_ICONINFORMATION);
TFmu:= 1.03;
Em.Text:= FloatToStr(TFmu);
exit;
end;

If TFU<=1.24 then TFU:= 1 else
If (TFU>=1.25) and (TFU<=1.74) then TFU:= 1.5 else
If (TFU>=1.75) and (TFU<=2.49) then TFU:= 2.0 else
If (TFU>=2.50) and (TFU<=3.49) then TFU:= 3.0 else
If (TFU>=3.50) then TFU:= 4.0;

If DBCBModul1.Enabled = True then
modul:=StrToFloat(DBCBModul1.Text)
else modul:=StrToFloat(DBCBModul2.Text);


If RGPolus.ItemIndex = 0 then
TFFlagPolusa:= True else
TFFlagPolusa:= False;

If ChBObr.Checked = True then
TFFlagObrabotki:= True else
TFFlagObrabotki:= False;


Raschet_bi(TFmu,TFbw1, TFMezhUgol, TFb1, TFb2, TFbw2);
GradMinSec(TFb1,Gb1,Mb1,Sb1);
GradMinSec(TFb2,Gb2,Mb2,Sb2);

GradMinSec(TFbw1,Gbw1,Mbw1,Sbw1);
GradMinSec(TFbw2,Gbw2,Mbw2,Sbw2);

Raschet_di(modul, TFz1, TFb1, TFd1);
TFd1:= RoundTo(TFd1,-2);
Raschet_di(modul, TFz2, TFb2, TFd2);
TFd2:= RoundTo(TFd2,-2);

Raschet_dbi(modul,TFz1,TFz2,TFb1,TFb2,TFdb1,TFdb2,TFat1,TFat2);
TFdb1:= RoundTo(TFdb1,-2);
TFdb2:= RoundTo(TFdb2,-2);

Raschet_CE(TFz1,TFz2,TFat1,TFat2,TFa,TFb1,TFb2,TFbw1,TFbw2, TFawt1,TFawt2,TFCE);

Raschet_xi(modul,TFmu,TFz1,TFz2,TFU,TFbw1,TFbw2,TFCE,TFdb1,TFdb2,TFawt1,TFawt2,
TFMezhUgol,TFb1,TFb2,{TFdf1,TFdf2,}TFFlagPolusa,TFda1,TFda2,TFx1,TFx2,TFaa1,TFaa2,
TFrb1,TFrb2,TFbb1,TFbb2,TFaw);
TFx1:= RoundTo(TFx1,-2);
TFx2:= RoundTo(TFx2,-2);
TFda1:= RoundTo(TFda1,-2);
TFda2:= RoundTo(TFda2,-2);

Raschet_dfi(modul,TFd1,TFd2,TFx1,TFx2,TFdf1,TFdf2);
TFdf1:= RoundTo(TFdf1,-2);
TFdf2:= RoundTo(TFdf2,-2);

Raschet_Sti(modul,TFb1,TFb2,TFx1,TFx2,TFat1,TFat2,TFSt1,TFSt2);
TFSt1:= RoundTo(TFSt1,-2);
TFSt2:= RoundTo(TFSt2,-2);

Raschet_bewi(TFrb1,TFrb2,TFaa1,TFaa2,TFawt1,TFawt2,TFbb1,TFbb2,
TFbew1,TFbeIw1,TFbew2,TFbeIw2);
TFbew1:= RoundTo(TFbew1,-2);
TFbeIw1:= RoundTo(TFbeIw1,-2);
TFbew2:= RoundTo(TFbew2,-2);
TFbeIw2:= RoundTo(TFbeIw2,-2);

Raschet_ali(TFat1,TFat2,TFx1,TFx2,TFb1,TFb2,TFz1,TFz2,TFal1,TFal2);
GradMinSec(TFal1,Gal1,Mal1,Sal1);
GradMinSec(TFal2,Gal2,Mal2,Sal2);

Raschet_ximin(TFz1,TFz2,TFat1,TFat2,TFb1,TFb2,TFx1min,TFx2min);
TFx1min:= RoundTo(TFx1min,-2);
TFx2min:= RoundTo(TFx2min,-2);

Raschet_ximax(TFCE,TFaw,modul,TFz1,TFz2,TFb1,TFb2,TFat1,TFat2,TFx1max);
TFx1max:= RoundTo(TFx1max,-2);

Epsilon:= R_Epsilon(TFz1,TFz2,TFaa1,TFaa2,TFawt1,TFawt2,TFbb1,TFbb2);
Epsilon:= RoundTo(Epsilon, -2);

Raschet_api(TFawt1,TFawt2,TFz1,TFz2,TFbb1,TFbb2,TFaa1,TFaa2,TFap1,TFap2);
GradMinSec(TFap1,Gap1,Map1,Sap1);
GradMinSec(TFap2,Gap2,Map2,Sap2);

Raschet_Sati(modul,TFb1,TFb2,TFda1,TFda2,TFz1,TFz2,TFx1,TFx2,TFal1,TFal2,TFaa1,TFaa2,
TFFlagObrabotki,TFSat1,TFSat2,TFmt1,TFmt2,TFSIa1,TFSIa2,TFSat1min,TFSat2min);
TFSat1:= RoundTo(Abs(TFSat1),-2);
TFSat2:= RoundTo(Abs(TFSat2),-2);
TFSIa1:= RoundTo(Abs(TFSIa1),-2);
TFSIa2:= RoundTo(Abs(TFSIa2),-2);
TFSat1min:= RoundTo(Abs(TFSat1min),-2);
TFSat2min:= RoundTo(Abs(TFSat2min),-2);

//------------------------------------------------------------------------------
If (TFx1>=TFx1min) and (TFal1>=0) then
OPodrez1:= 'На первом колесе подрез отсутствует;'
else
OPodrez1:= 'На первом колесе может быть подрез зубьев;';

If (TFx2>=TFx2min) and (TFal2>=0) then
OPodrez2:= 'На втором колесе подрез отсутствует;'
else
OPodrez2:= 'На втором колесе может быть подрез зубьев;';

If (OPodrez1 = 'На первом колесе подрез отсутствует;') and
(OPodrez2 = 'На втором колесе подрез отсутствует;')
then begin
TFOPodrez:= True;
IPodrez.Picture.LoadFromFile('Images/Checked.bmp');
end
else begin
TFOPodrez:= False;
IPodrez.Picture.LoadFromFile('Images/Error.bmp');
end;
//------------------------------------------------------------------------------
If Epsilon>=0 then
KPerekr:= 'Значение коэффициента перекрытия корректно;'
else
KPerekr:= 'Коэффициент перекрытия ниже минимального значения;';

If KPerekr = 'Значение коэффициента перекрытия корректно;'
then begin
TFKPerekr:= True;
IKoPer.Picture.LoadFromFile('Images/Checked.bmp');
end
else begin
TFKPerekr:= False;
IKoPer.Picture.LoadFromFile('Images/Error.bmp');
end;
//------------------------------------------------------------------------------
if TFSat1>=TFsat1min then
OZaostr1:= 'Заострение зубьев на первом колесе отсутствует;'
else
OZaostr1:= 'На первом колесе может быть заострение зубьев;';

if TFSat2>=TFsat2min then
OZaostr2:= 'Заострение зубьев на втором колесе отсутствует;'
else
OZaostr2:= 'На втором колесе может быть заострение зубьев;';

If (OZaostr1 = 'Заострение зубьев на первом колесе отсутствует;') and
(OZaostr2 = 'Заострение зубьев на втором колесе отсутствует;')
then begin
TFOZaostr:= True;
IZaostr.Picture.LoadFromFile('Images/Checked.bmp');
end
else begin
TFOZaostr:= False;
IZaostr.Picture.LoadFromFile('Images/Error.bmp');
end;
//------------------------------------------------------------------------------
//==============================================================================
TrebKPer:=RGTreb.Items.ValueFromIndex[RGTreb.ItemIndex];
RaspPolus:= RGPolus.Items.ValueFromIndex[RGPolus.ItemIndex];

MKomment.Lines.Clear;
MKomment.Paragraph.Alignment:= taCenter;

if TFOPodrez = False then
begin
MKomment.Lines.Add(' Условие отсутствия подрезания зубьев: '+#13#10);
MKomment.Lines.Add(
' ali >= 0;'+#13#10+
' xi>=ximin;'+#13#10);
MKomment.Lines.Add(
' Результат вычислений: '+#13#10);
MKomment.Lines.Add(
' al1 = '+FloatToStr(RoundTo(TFal1,-3))+';'+#9+
' al2 = '+FloatToStr(RoundTo(TFal2,-3))+';'+#13#10+
' x1 = '+FloatToStr(TFx1)+';'+#9+' x1min = '+FloatToStr(TFx1min)+';'+#13#10+
' x2 = '+FloatToStr(TFx2)+';'+#9+' x2min = '+FloatToStr(TFx2min)+';'+#13#10);

if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);
goto LPodrez;
until TFOPodrez = True;
end;

if TFKPerekr = False then
begin
MKomment.Lines.Add(' Минимальная величина коэффициента перекрытия: '+#13#10);
MKomment.Lines.Add(
' E = 1,2;'+#13#10);
MKomment.Lines.Add(
' Результат вычислений: '+#13#10);
MKomment.Lines.Add(
' E = '+FloatToStr(Epsilon)+';'+#13#10+
''+#13#10);
end;

if TFOZaostr = False then
begin
MKomment.Lines.Add( 'Условие отсутствия заострения зубьев: '+#13#10);
MKomment.Lines.Add(
' Sati >= Satimin;'+#13#10);
MKomment.Lines.Add(
' Результат вычислений: '+#13#10);
MKomment.Lines.Add(
' Sat1 = '+FloatToStr(TFSat1)+';'+#9+' Sat1min = '+FloatToStr(TFSat1min)+';'+#13#10+
' Sat2 = '+FloatToStr(TFSat2)+';'+#9+' Sat2min = '+FloatToStr(TFSat2min)+';'+#13#10+
''+#13#10);

if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);
goto LPodrez;
until TFOPodrez = True;
end;

end;


end.[/more]
Автор: frenjogle
Дата сообщения: 16.04.2008 20:42
Приветствую всех! У меня такая проблемка. Задали написать программку на делфи, которая подсчитывает, как часто встречаются буквы в тексте, то есть в итоге нужно получить список букв и указано в процентах количество повторений этого символа по отношению ко всему тексту.

Но проблемка в том, что я делфи вообще не знаю
Мне сказали, напиши на паскале сам алгоритм, мы тебе переделаем. Я написал, все работает, но вот в делфи перевести не смогли (какая-то ошибка появлялась).

Поэтому у меня вот какие вопросы.
1. есть ли в делфи функция, которая подсчитывает общее число символов в тексте?
2. есть ли в делфи функция, которая подсчитывает количество повторений определенного символа в тексте?

на всякий случай привожу код на паскале, если у кого найдется свободная минутка, скомпильте мне, пожалуйста, все это на делфи в любой варианте, самое главное чтобы работало))
[more] Program zadacha;
uses crt;
var a:array[1..100] of string; d:string;
var c:array[1..100] of integer;
var i,j,k,p,h:integer; s:real;
var f1,f2:text;

begin
i:=0; p:=0;

assign(f1,'3.txt'); {привязка файла со входными данными к переменной}
reset(f1); {открытие файла. все файлы находятся в текущей директории паскаля}

while not Eof(f1) do {задаю текст в файле массивом string}
begin
i:=i+1;
p:=p+1;
readln(f1,a[i]);
end;

close(f1); {закрытие файла}


for h:=1 to p do {собственно, сам алгоритм}
begin
d:=a[h];
for i:=ord('a') to ord('z') do
for j:=1 to length(d) do
begin
if i=ord(d[j]) then
begin
s:=s+1;
c[i-ord('a')+1]:=c[i-ord('a')+1]+1;
end;
end;
end;

assign(f2,'4.txt'); {привязка файла f2, куда запишем выходные данные, к переменной}
rewrite(f2); {открытие файла для перезаписи}

for i:=ord('a') to ord('z') do {записываю выходной массив в файл}
begin
write(f2,chr(i));
write(f2,(c[i-ord('a')+1]/s*100):6:2,'%');
writeln(f2);
end;

close(f2); {закрытие файла f2}
readln;

end. [/more]
Автор: Frodo_Torbins
Дата сообщения: 16.04.2008 23:17
Странно, что не смогли, если в оригинале и правда работает (не проверял). Могу посоветовать следующее:
-сделать все тоже самое, но в виде процедуры;
-тип Text в делфи заменен на TextFile, Assign переименован AssignFile, а Close в CloseFile, все это надо поправить в вашем коде (кстати об этом хорошо написано в хелпе);
-если вам нужно оконное приложение, то выкинуть в конце "readln;".
После этого вашу процедуру можно будет смело копировать в модуль делфи, и вызывать в обработчике нажатия кнопки.
Автор: ALPeresvet
Дата сообщения: 17.04.2008 07:59
ymg2000
Спасибо за помощь. Объявил процедуру локальной и всё стало шоколадным )).
Автор: Dimoniusis
Дата сообщения: 17.04.2008 08:39
frenjogle лови. Написал с нуля, ибо просто все, внутри каждая строчка прокомментирована.

Ошибки скорее всего были из-за Assign - в Delphi "AssignFile" всесто "Assign" а "file" заменить на "text". В любом случае у тебя получилось бы консолькое приложение, я тебе написал нормальное - с графическим интерфейсом
Автор: ymg2000
Дата сообщения: 17.04.2008 08:45
ALPeresvet
Ну и славненько. Тебе нужно поработать над логикой и структурированностью своих программ. И никогда не используй оператор goto.
Автор: delover
Дата сообщения: 17.04.2008 14:10
Как можно скроллировать содержание TTreeView? Дело в том, что когда я апдейтю дерево, то приходится делать Node.MakeVisible. А если название нода не влазит в экран треевиюхи, то всё дерево сдвигается. Все узлы перестают быть видимыми только для того чтобы я увидел последние две буковки в названии нода. Так мне этого не надо. Надо скроллировать обратно, на нулевую позицию. Следующий код работает криво:

J := GetScrollPos(tv.Handle, SB_HORZ);
tv.ScrollBy(J, 0);
//tv.Invalidate;

А как надо?
Автор: frenjogle
Дата сообщения: 17.04.2008 22:43
Dimoniusis, очень выручил!!! Спасибо огрррромнейшее тебе! Все работает именно так как и нужно!! Теперь, если что, я знаю, к кому обращаться

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.