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

» Вопросы по Delphi

Автор: Sleepwalker
Дата сообщения: 14.09.2005 19:32
STEEL
smtp&pop есть в уже обозначенных на этой странице сборках.


Цитата:
резбивать файлы на части

а набросать самому? файл в поток - и реж его как вздумается
Автор: DUMAND
Дата сообщения: 14.09.2005 22:08
Z MeZe

Только пришел.
Попробовал. Все работает Благодарность безмерная. Это ссылка http://forum.ru-board.com/topic.cgi?forum=5&topic=8934&start=0, где обсуждается программа, для которой так пригодилась Ваша помощь (если интересно).
Как ни странно, в Инете я не нашел (а я искал) такого простого и изящного решения. А вопросов по работе с текстовыми файлами много.
Теперь в процессе тестирования проявилась другая проблема. Сначала я приведу пример реальных данных в файле eyes.txt. Понятно, что в середине строк тоже могут отсутствовать данные. Криво как-то скопировалось....

Код: ДатаВремяЛевый глазБаланс красный цветБаланс зеленый цветБаланс дистанцияПравый глазБаланс красный цветБаланс зеленый цветБаланс дистанцияОба глазаБаланс красный цветБаланс зеленый цветБаланс дистанция
22.03.200517:35:180.300100.000100.00023.0000.400100.000100.00034.0000.450100.000100.00036.000
25.03.200518:07:420.351100.000100.00024.0000.351100.000100.00026.0000.400100.000100.00014.000
27.03.200522:59:210.351100.000100.0001.000
27.03.200523:11:320.400100.000100.0001.000
27.03.200523:41:210.400100.000100.0001.000
27.03.200523:51:080.351100.000100.0001.000
24.03.200509:15:390.351100.000100.0001.0000.400100.000100.0001.0000.450100.000100.0001.000
25.03.200509:53:270.400100.000100.0001.0000.400100.000100.0005.0000.400100.000100.0001.000
26.03.200510:10:090.351100.000100.0002.0000.300100.000100.0001.000
Автор: Z MeZe
Дата сообщения: 15.09.2005 11:41
DUMAND

Цитата:
Как ни странно, в Инете я не нашел (а я искал) такого простого и изящного решения.

Ну, если быть честным, это не самое (даже, наверное, далеко не самое) изящное решение. К примеру: если дата задана в формате ДД.ММ.ГГ, или время только ЧЧ:ММ, то вся "конструкция" рушится. Этот вариант корректен, если известен ЧЕТКИЙ формат, к примеру, даты в файле.
Просто корректировал тот код, который был, чтобы было понятнее.


Цитата:
Два вопроса:
1. Можно ли в процессе чтения вместо отсутствующих данных поставить нули. График получается "корявый", но все же программа работает.
2. Может быть возможно, чтобы пропуск в данных сохранить и на графике отразить отсутствием точки и соединением линией графика имеющихся соседних точек. Насколько я понял, это не получится (нет возможностей TChart)

Вот, если правильно понял вопросы, решение оных двух:

Цитата:

unit Unit_222;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, TeeProcs, TeEngine, Chart, Series;

type
TForm1 = class(TForm)
Chart1: TChart;
BitBtn1: TBitBtn;
Series1: TLineSeries;
Series2: TLineSeries;
Series3: TLineSeries;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
n,lbt,ldt,lbtd,ldtd,laoa,rbt,rdt,rbtd,rdtd,raoa,bbt,bdt,bbtd,bdtd,baoa:double;
lostr,lred,lgreen,ldis,rostr,rred,rgreen,rdis,bostr,bred,bgreen,bdis:double;

implementation

{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
F: TextFile;
BufStr: String;
BufStrList: TStringList;
begin
DecimalSeparator := '.';
AssignFile(f,'users/Eyes.txt');
Reset(f);
n:= 0;
while not EOF(f) do begin
n:= n + 1;
ReadLn(F, BufStr);
BufStrList:=TStringList.Create;
BufStrList.Text:=StringReplace(BufStr,#9,#13#10,[rfReplaceAll]);
if BufStrList.Count >1 then
begin
if BufStrList.Strings[2] <> '' then lostr:= StrToFloat(BufStrList.Strings[2]) else lostr:= 0;
if BufStrList.Strings[3] <> '' then lred:= StrToFloat(BufStrList.Strings[3]) else lred:= 0;
if BufStrList.Strings[4] <> '' then lgreen:= StrToFloat(BufStrList.Strings[4]) else lgreen:= 0;
if BufStrList.Strings[5] <> '' then ldis:= StrToFloat(BufStrList.Strings[5]) else ldis:= 0;
if BufStrList.Strings[6] <> '' then rostr:= StrToFloat(BufStrList.Strings[6]) else rostr:= 0;
if BufStrList.Strings[7] <> '' then rred:= StrToFloat(BufStrList.Strings[7]) else rred:= 0;
if BufStrList.Strings[8] <> '' then rgreen:= StrToFloat(BufStrList.Strings[8]) else rgreen:= 0;
if BufStrList.Strings[9] <> '' then rdis:= StrToFloat(BufStrList.Strings[9]) else rdis:= 0;
if BufStrList.Strings[10] <> '' then bostr:= StrToFloat(BufStrList.Strings[10]) else bostr:= 0;
if BufStrList.Strings[11] <> '' then bred:= StrToFloat(BufStrList.Strings[11]) else bred:= 0;
if BufStrList.Strings[12] <> '' then bgreen:= StrToFloat(BufStrList.Strings[12]) else bgreen:= 0;
if BufStrList.Strings[13] <> '' then bdis:= StrToFloat(BufStrList.Strings[13]) else bdis:= 0;

if rostr <> 0 then series1.AddXY(n, rostr,'',clblue);
if lostr <> 0 then series2.AddXY(n, lostr,'',clgreen);
if bostr <> 0 then series3.AddXY(n, bostr,'',clred);
end;
BufStrList.Free;
end;
CloseFile(f);
end;

end.

Пример при учете, что если нет какого-то значения в файле, то должен быть ТАВ, т.е:

23.03.2005[ТАВ]18:56:34[ТАВ]3.56[ТАВ][ТАВ]34[ТАВ]45[ТАВ]56[ТАВ][ТАВ][ТАВ]
23.03.2005[ТАВ]19:56:34[ТАВ]3.56[ТАВ][ТАВ][ТАВ][ТАВ][ТАВ][ТАВ][ТАВ]

Если разделитель не [ТАВ], то в строке BufStrList.Text:=StringReplace(BufStr,#9,#13#10,[rfReplaceAll]);
заменить #9 на символ (если пробел, то #9 заменить на ' ').


Цитата:
Это ссылка http://forum.ru-board.com/topic.cgi?forum=5&topic=8934&start=0, где обсуждается программа, для которой так пригодилась Ваша помощь (если интересно).

А я уже наблюдал , но не пробовал... Вещь интересная
Автор: relictus
Дата сообщения: 15.09.2005 13:03
А вот такой вопрос, уже голову сломал на нем )
стандартный DBGrid + в него загружена таблица с, к примеру, 50 полями.
Понятно, что не все они видимы сразу на гриде и чтобы посмотреть невидимые, приходится горизонтально скроллить грид. Так вот вопрос: как узнать какие поля в данный момент видимы, а какие нет? Св-во Visible естественно не подходит.....
Автор: vserd
Дата сообщения: 15.09.2005 13:39
relictus
поробуй покопать в сторону TCustomGrid.LeftCol. Возмоно что прийдеться субклассировать TDBGrid в коде для доступа к protected методам

Type
TMyHookGrid = class(TDBGrid)

а в коде
TMyHookGrid (DbGrid1).LeftCol
Автор: relictus
Дата сообщения: 15.09.2005 15:40

Цитата:
поробуй покопать в сторону TCustomGrid.LeftCol.


спасибо - помогло!
Автор: Z MeZe
Дата сообщения: 15.09.2005 17:14
Помогите найти TCheckTreeView (типа http://www.erpos.ro/en/delphicomp/delphicomp.htm ), но не хотелось бы буржуйское.
Есть ссылки,.. много, пока безрезультатно.

Добавлено:
Нашел такую вещь,... http://downloads.delphi32.com/690/1097/checktree.zip
но что-то пока не понял.
Кто-то пользовался? Похоже это на предыдущее?
Автор: DUMAND
Дата сообщения: 15.09.2005 22:28
Z MeZe

У меня как раз формат и даты и времени задан. Так что все нормально. Но вот поиграл с данными. И такая ерунда получается. Если данные отсутствуют в начале или середине строки - все корректно. Если отсутствует ПОСЛЕДНЕЕ значение в строке, то там нет ТАВ (смотрел в UltraEdit) и появляется ошибка (что-то про индекс). Я добавил в файле данных в конце строки (где нет данных) перед знаком перевода строки ТАВ и все работает. Т.е. в строке получается 11 а не 12 значений (или ТАВ) без даты и времени. Может их проверять на количество и добавлять в конце ТАВ? Происходит все если нет последнего значения в строке.
Автор: imonah
Дата сообщения: 15.09.2005 22:54
DUMAND
Да ставь ты вместо них нулевые данные (в текстовом файле данных) да и все... А если потом в процессе работы нули не устраиваю (графики кривые), то делай в коде обработку нулевых значений, типа экстаполяции данных между двумя соседними точками в чарте.
Автор: DUMAND
Дата сообщения: 15.09.2005 23:15
imonah
Да не программист я, а врач. Для меня открыт только файл с данными, а как они записываются в файл мне неведомо. Вот и приходится выкручиваться. Вообще-то графики у меня строятся в Экселе. Только оказалось, что есть масса пациентов для которых Эксель неизвестен. Гоняют игрушки...


Добавлено:
imonah
А про "экстаполяцию данных между двумя соседними точками в чарте" можно подробнее? Я пытался ее там найти, но увы. Где там что выставить надо?
Автор: Z MeZe
Дата сообщения: 16.09.2005 00:45
DUMAND

Цитата:
И такая ерунда получается.

Можно подробнее по поводу ерунды.

Цитата:
Если данные отсутствуют в начале или середине строки - все корректно

Если там ЖЕЛЕЗНО стоит TAB, то так и должно быть.

Цитата:
Если отсутствует ПОСЛЕДНЕЕ значение в строке, то там нет ТАВ (смотрел в UltraEdit) и появляется ошибка (что-то про индекс).

Поправить строку :
if BufStrList.Strings[13] <> '' then bdis:= StrToFloat(BufStrList.Strings[13]) else bdis:= 0
на
if BufStrList.Count > 13 then if BufStrList.Strings[13] <> '' then bdis:= StrToFloat(BufStrList.Strings[13]) else bdis:= 0
При условии, что там железно 13 столбцов (если нет, то соответственно проверка в каждую предыдущую строку с соответствующим индексом).
imonah

Цитата:
типа экстаполяции данных между двумя соседними точками в чарте.

Ну вообще, чисто теоретически, все таки интерполяции.

Цитата:
А про "экстаполяцию данных между двумя соседними точками в чарте" можно подробнее? Я пытался ее там найти, но увы. Где там что выставить надо?

Так вот, если я правильно понимаю, график состоит из дискретных значений. Тот пример, последний, думаю, решает проблему нулевых (пустых) значений.
А какой смысл интерполировать между двумя точками.
Если не хочется иметь угловатый график, то для начала нужно рассчитать сплайн (способов море, все зависит от того, что на выходе), а затем уже его и строить. Т.е. по всем точкам получится некая функция.
А вот строить интерполяционный сплайн между двумя точками бессмысленно.
Короче говоря, если хочется получить некую гладкую кривую, то строить по точкам в лоб неправильно.
Путанно, но, думаю, понятно.
Автор: DUMAND
Дата сообщения: 16.09.2005 10:15
Z MeZe

Цитата:
DUMAND

Поправить строку :
if BufStrList.Strings[13] <> '' then bdis:= StrToFloat(BufStrList.Strings[13]) else bdis:= 0
на
if BufStrList.Count > 13 then if BufStrList.Strings[13] <> '' then bdis:= StrToFloat(BufStrList.Strings[13]) else bdis:= 0
При условии, что там железно 13 столбцов (если нет, то соответственно проверка в каждую предыдущую строку с соответствующим индексом).


Сейчас попробовал. Все работает. Попробую поиграть с данными. Но почти полностью уверен - работает!!! Спасибо



Цитата:

Цитата:А про "экстаполяцию данных между двумя соседними точками в чарте" можно подробнее? Я пытался ее там найти, но увы. Где там что выставить надо?

Так вот, если я правильно понимаю, график состоит из дискретных значений. Тот пример, последний, думаю, решает проблему нулевых (пустых) значений.
А какой смысл интерполировать между двумя точками.
Если не хочется иметь угловатый график, то для начала нужно рассчитать сплайн (способов море, все зависит от того, что на выходе), а затем уже его и строить. Т.е. по всем точкам получится некая функция.
А вот строить интерполяционный сплайн между двумя точками бессмысленно.
Короче говоря, если хочется получить некую гладкую кривую, то строить по точкам в лоб неправильно.
Путанно, но, думаю, понятно.


Абсолютно понятно. Мне как раз нужен несглаженный, угловатый график. Проблема-то была в соединении прямой линией двух соседних точек при условии отсутствия между ними нескольких значений. Но Ваш код полностью решил эту проблему.

Еще раз большое спасибо. Если захотите поработать с программой, я к вашим услугам.
А сейчас буду в удовольствие играть с данными.
Автор: DUMAND
Дата сообщения: 17.09.2005 21:42
Опять прошу помощи. Сделал форму для внесения данных пациента. Обычные ComboBox и Edit. А как сохранить данные в текстовый файл не нашел. Может у кого есть простенький пример кода?
Автор: imonah
Дата сообщения: 17.09.2005 22:18
DUMAND
Откуда и какие данные сохранить? Подробнее, плиз. Проблема не понятна.
Если просто из эдит, то так:

Код:
var f:textfile;

AssignFile(f, 'pacient.dat');
Rewrite(f);
WriteLn(f, Edit1.text);
CloseFile(f);
Автор: DUMAND
Дата сообщения: 17.09.2005 23:57
imonah

Фу... Наконец закончил все прописывть и тестировать. Все работает. Вот спасибо Вам!
И еще два вопроса. В файл все пишется. Только без названия бокса. Например ComboBox называется "Диагноз" и в нем выбор из 4 вариантов. Вариант пишется. А нельзя записать так: Диагноз=Близорукость. И так далее. И еще. Можно ли в такую же форму (новое приложение) возвращать (читать) значения из файла данных. Неудобно просматривать текстовые файлы. А так все будет в привычном виде. Файл-то с одним именем для всех, только в разных папках. Можно добавить кнопку открытия файла и считать его?

Добавлено:
И еще вопрос. Хочу сделать автоматическую отправку файла с данными лечения на мой почтовый ящик. Полдня просидел IdSMTP и MAPI. Решил SMTP сервер использовать своего провайдера. MAPI заработал. С IdSMTP еще надо разбираться. Компиляция ОК. Только непересылает. Искал в инете решение. И нашел другую информацию Провайдеры часто запрещают пользование чужих SMTP-серверов. А пациенты у разных провайдеров. Как лучше поступить, как обычно делают?
Автор: DUMAND
Дата сообщения: 19.09.2005 08:30
С записью в файл названий боксов разобрался.
Вывод данных из файла в форму. Пробовал выводить в свойство Text LabelEdit и Edit значения переменных. Не получилось.
С почтой приходится думать. MAPI использует мэйл-клиент пользователя. И немалое кол-во юзеров используют удаленные сервисы. mail.ru, yandex.ru.... Получается, надо использовать два алгоритма? Или есть общие решения?
Автор: vserd
Дата сообщения: 19.09.2005 11:56
DUMAND
Если вы будете отправлять файлы для себя с согласия пользователя, тогда просто сделайте ShellExecute(Application.Handle,'open','mailto:towho@mysite.com',nil,nil,0)

Здесь будет создано письмо в пользовательском почтовом клиенте. Пользователю останется только нажать на "Отправить". Программы которые будут пытаться отправлять данные автоматом нормальные пользователи считают вредоносными, так что лучьше покажите что вы будете отправлять, пользовтаелю спокойнее, и вам хорошо.

Кроме того, MAPI менее распространненый протокол чем SMTP.

В основном форуме у вас было пожелание чтобы были кнопки на флеше. Сразу предупреждаю, если мене прийдеться скачать версию с флешем, значит я буду требовать версию без флеша. Т.к. флеш по нормальному не рубиться при просмотре в Internet он у меня не стоит по нормальному. Так что оставьте стандартные компоненты WINDOWS. Среди моих знакомых таких довольно много.


Цитата:
И еще. Можно ли в такую же форму (новое приложение) возвращать (читать) значения из файла данных. Неудобно просматривать текстовые файлы. А так все будет в привычном виде. Файл-то с одним именем для всех, только в разных папках. Можно добавить кнопку открытия файла и считать его?

Конечно можно. здесь операция будет похоже на запись данных в файл. Только будьте внимательны при определении формата выводимых данных (при его изменении нужно будет менять процедуру чтения из файла)
Как собственная шишка пожелание, пишите версию формата данных в файл данных.
Это поможет понять что не так в данных которые вы пытаетесь прочитать.

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


Цитата:
Например ComboBox называется "Диагноз" и в нем выбор из 4 вариантов. Вариант пишется. А нельзя записать так: Диагноз=Близорукость.

Что произойдет с форматом выходных данных если интерфейс программы будет переведен на другой язык?


Цитата:
Вывод данных из файла в форму. Пробовал выводить в свойство Text LabelEdit и Edit значения переменных. Не получилось.

Код в студию. Что пишет компилятор, что выводит программа?
Не обязательно всю простыню, достаточно одного контрола.

Автор: imonah
Дата сообщения: 19.09.2005 15:46
DUMAND

Цитата:
Только без названия бокса. Например ComboBox называется "Диагноз" и в нем выбор из 4 вариантов. Вариант пишется. А нельзя записать так: Диагноз=Близорукость.

Можно... Либо на событие FormCreate запоминать в переменные имена комбобоксов и потом их выводить

Код:
cbText:=ComboBox1.Text;

.....(после изменения в боксе Text будет уже иметь выбранное значение)

WriteLn(f,cbText,+'='+ComboBox1.Text);
Автор: DUMAND
Дата сообщения: 19.09.2005 18:04
vserd

Цитата:
DUMAND
Если вы будете отправлять файлы для себя с согласия пользователя, тогда просто сделайте ShellExecute(Application.Handle,'open','mailto:towho@mysite.com',nil,nil,0)

Здесь будет создано письмо в пользовательском почтовом клиенте. Пользователю останется только нажать на "Отправить". Программы которые будут пытаться отправлять данные автоматом нормальные пользователи считают вредоносными, так что лучьше покажите что вы будете отправлять, пользовтаелю спокойнее, и вам хорошо.


Да, с Shell я делал все успешно. Но мне требуется присоединить архив файлов с заданиями. А это с Shell не сделаешь. А показать текст письма несложно в Help.


Цитата:

Кроме того, MAPI менее распространненый протокол чем SMTP.

Пытался разобраться с IdSNTP. Правда, запутался.

Цитата:

В основном форуме у вас было пожелание чтобы были кнопки на флеше. Сразу предупреждаю, если мене прийдеться скачать версию с флешем, значит я буду требовать версию без флеша. Т.к. флеш по нормальному не рубиться при просмотре в Internet он у меня не стоит по нормальному. Так что оставьте стандартные компоненты WINDOWS. Среди моих знакомых таких довольно много.

Флеш все равно требуется. На нем сделана проверка зрения и основной тренинг Таблицы. Я во флеше сам это делаю. А плеер включен в дистрибутив.

Цитата:

Цитата:И еще. Можно ли в такую же форму (новое приложение) возвращать (читать) значения из файла данных. Неудобно просматривать текстовые файлы. А так все будет в привычном виде. Файл-то с одним именем для всех, только в разных папках. Можно добавить кнопку открытия файла и считать его?

Конечно можно. здесь операция будет похоже на запись данных в файл. Только будьте внимательны при определении формата выводимых данных (при его изменении нужно будет менять процедуру чтения из файла)
Как собственная шишка пожелание, пишите версию формата данных в файл данных.
Это поможет понять что не так в данных которые вы пытаетесь прочитать.

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

Да, с чтением уже проблем нет. А вот вставить значение в Edit не получилось. Пробовал
________________
var
lostr:double;
.....
writeln(f,lostr);
...
edit1.text:=lostr;
________________

Получил ошибку. [Error] Unit_444.pas(94): Incompatible types: 'String' and 'Double'


Цитата:

Цитата:Например ComboBox называется "Диагноз" и в нем выбор из 4 вариантов. Вариант пишется. А нельзя записать так: Диагноз=Близорукость.
Что произойдет с форматом выходных данных если интерфейс программы будет переведен на другой язык?

Да вроде ничего. Там только дата рождения, текстовые значения и числа.


Цитата:

Цитата:Вывод данных из файла в форму. Пробовал выводить в свойство Text LabelEdit и Edit значения переменных. Не получилось.

Код в студию. Что пишет компилятор, что выводит программа?
Не обязательно всю простыню, достаточно одного контрола.

[/q]
Выше привел часть кода.

imonah

Цитата:

Можно... Либо на событие FormCreate запоминать в переменные имена комбобоксов и потом их выводить

Код:
cbText:=ComboBox1.Text;

.....(после изменения в боксе Text будет уже иметь выбранное значение)

WriteLn(f,cbText,+'='+ComboBox1.Text);

Ну или просто писать:

Код:
WriteLn(f, 'Диагноз='+ComboBox1.Text);

Пошел втупую. WriteLn(f, 'Диагноз=',ComboBox1.Text);
Все получилось.

Только обратно в бокс значение вывести не получается.

______________________


Автор: vserd
Дата сообщения: 19.09.2005 18:55

Цитата:
edit1.text:=lostr;

угу. правильно матюкакется.

edit1.text:=FloattoStr(lostr); //для вещественных (которые дробные) Возможно потребуется использование FloatToStrF для "более правильного" форматирования.
edit1.text:=InttoStr(IntVar); // Для целых
edit1.text:=DateToStr(IntVar); // Для дат
соответственно StrToXXX переводит из строки в требуемый тип. (ххх означает нужный тип)

Еще одно примечание.
Вполне возможно вам будет удобнее работать через TStringList в место WriteLn.
У этого класса есть методы SaveToFile, LoadFromFile которые записывают/считывают свое содержимое в файл/из файла.
Почитайте HELP, может подойдет.


Цитата:
. А это с Shell не сделаешь. А показать текст письма несложно в Hel

посмотрите на эти ссылки там есть код, код не проверял, это ссылки по поиску Google.
http://forum.codenet.ru/showthread.php?s=733196f257ba0af3b83662f543223b0e&postid=89417 http://www.developing.ru/forum/viewtopic.php?p=5264 (здесь есть строка idSMTP1)
http://www.delphikingdom.com/asp/itemq.asp?ItemID=36&ComponentID=&Count=10&pNo=3 а здесь их море :)
Автор: DUMAND
Дата сообщения: 19.09.2005 22:08
vserd
Большое спасибо всем за помощь. Теперь появляется основа под методом тыка.

С почтой пока решил подождать. Кстати, по ссылкам Shell не работает с Attach.

Вопрос по чтению из текстового файла. Файл:
____________________
Фамилия=Иванов
Имя=Петр
Отчество=Сидорович
Имя пользователя= Папа
Дополнительная информация=В 1989 было сотрясение мозга
Дата рождения=14.09.1977
Пол=мужской
Пользование очками или линзами=Очки
Продолжительность пользования=3
Левый глаз. Рефракция=0.75
Левый глаз. Диагноз=Близорукость
Левый глаз. Амблиопия=Неизвестно
Левый глаз. Оптическая коррекция=0.5
Правый глаз. Рефракция=0.5
Левый глаз. Диагноз=Близорукость
Правый глаз. Амблиопия=Неизвестно
Правый глаз. Рефракция=0.25
Косоглазие=Нет
Дальтонизм=Неизвестно
Хирургическая коррекция=Нет
Левый глаз. Астигматизм=Есть
Правый глаз. Астигматизм=Нет
______________________

Как читать переменные, чтобы читались только значения после = ?

Если бы тип совпадал, то было бы верно: edit1.text:=lostr; ?

Теперь общий вопрос.
Когда начал разбираться с MAPI, нашел в Инете разные варианты кодов *.pas. Копирую, вставляю и ничего. Понял, что какие-то данные находятся в других файлах. Вот и возникают вопросы:
1. Надо ли копировать другие файлы (например *.dfm) из другого проекта в папку со своим?
2. Предположим в приложение есть дополнительная форма form2. Как открыть ее кнопкой button1 из основной формы form1? И как закрыть кнопкой button2 в форме form2.
Автор: ALeXkRU
Дата сообщения: 19.09.2005 23:18
DUMAND

Цитата:
2. Предположим в приложение есть дополнительная форма form2. Как открыть ее кнопкой button1 из основной формы form1? И как закрыть кнопкой button2 в форме form2.

щелкнуть по кнопке Button1 и в обработчике вставить

Код: Form2.show;
Автор: PowerChute
Дата сообщения: 20.09.2005 04:44
DUMAND

Цитата:
Вопрос по чтению из текстового файла.

Да это же обыкновенный ini-файл.

Пример из хэлпа:
procedure TForm1.FormActivate(Sender: TObject);

var
MyIniFile: TIniFile;
begin
MyIniFile := TIniFile.Create('myapp.ini');
with MyIniFile do
begin
if ReadBool('AutoLoad', 'FormProperties', False) = True then
begin
Visible := ReadBool('FormOptions', 'Visible', True);
Color := TColor(ReadInteger('FormOptions', 'Color', clNormalBackground));
Caption := ReadString('FormOptions', 'Caption', 'Main');
end;
MyIniFile.Free;

end;
Автор: vserd
Дата сообщения: 20.09.2005 11:38
DUMAND

Цитата:
Вопрос по чтению из текстового файла. Файл:
____________________
Фамилия=Иванов

Воспользуйтесь TIniFile.
Я не пробовал работать с пустой секцией
edit1.text := MyIniFile.ReadString('', 'Левый глаз. Диагноз', 'Не задан');
Попробуйте, если не получится вам прийдеться изменить код который формирует файл с данными. Возможно два варианта:
1. В коде с WriteLn добавить еще один WriteLn(F, '[UserInfo]');
Чтение будете делать edit1.text := MyIniFile.ReadString('UserInfo', 'Левый глаз. Диагноз', 'Не задан');

2. Преписать этот код заново с использованием TIniFile.
(преймущество в том что вам не нужно будет следить за порядком вызовов при записи)
Можете также структурировать данные в файле.
Например так
[UserInfo]
фамилия=
Имя=

[Diagnoz]
Левый глаз. Рефракция=
правый глаз. =......

[TestingData]
String1=1.00000 0.0004
String2=999 989898 6765
ну и так далее.
А потом писать из разных мест программы в этот файл не заботясь о других секциях.


Цитата:
2. Предположим в приложение есть дополнительная форма form2. Как открыть ее кнопкой button1 из основной формы form1? И как закрыть кнопкой button2 в форме form2.

Все зависит от.... :)
1. Если форма модальная (должна не давать работать с программой до тех пор пока ее не закроют), тогда в секции Implementation в Uses напишите что-то на подобии:
Uses ..., UForm2; (UForm2 -- имя модуля (файла))

в обработчике button1.click(...) пишете
var Frm : TForm2;
begin
Frm := TForm2.Create(Application);
try
Frm.ShowModal
finally
Frm.Free;
end;
end;

В Form2.Button2.click()
пишете
ModalResult := MR_OK;

2. Если форма не модальная (В чем я сомневаюсь). тогда все немного сложнее:
в
interface
uses .... , UForm2;
в
TForm1 =Class(...)
private
FFrm : TFORM2;
.....
в обработчике button1.click(...) пишете

begin
if not Assigned(FFrm) then begin
Frm := TForm2.Create(Application);
end;
FFrm.Show
end;
в обработчиках Form1.OnCreate()
пишете
begin
inherided;
.....
FFrm := nil;
end;
в Form1.On.Destroy()
begin
.....

FFrm.Free
FFrm := nil;
.....

inherided;
end;

В Form2.Button2.click()
пишете
Close;

В Form2.OnClose()
пишете
begin
Action := caHide;
end;
Автор: DUMAND
Дата сообщения: 20.09.2005 12:19
ALeXkRU
PowerChute
vserd

Большое спасибо. Сажусь разбираться. Завидую вам. Как вы разбираетесь во всем этом!
Автор: PowerChute
Дата сообщения: 20.09.2005 12:52
DUMAND
Зато в медицине мы полные профаны.
Автор: vserd
Дата сообщения: 20.09.2005 14:56
DUMAND
посмотри на себя со стороны, сплошные матюки Диоптрии, дифракции, рефрацкии, астигматизм, а всяких болячек только ты сходу сможешь назвать столько что у народа уши завянут. Как в них только разобраться? Что зачем и тем более почему, от этого свихнуться можно, а заочно давать консультации это вобще высший пилотаж :))

У нас все простенько. Неполучается, код в студию, посмотрел и сказал, вот тут ошибочка, а вот тут можно улучшить. А кроме того это железяка, можно попробовать много раз, а на человеке так не получится. Так что у тебя работка посложнее.

Просто каждый занимается своей областью и, иногда, по нужде\работе вторгается в область другого :))). Если не занешь спрашиваешь, вот и набираешся опыта.
Автор: zvyagaaa
Дата сообщения: 21.09.2005 12:45
Вопрос по базам данных Access. Из-за чего может возникать ошибка в ADOTable Типа "не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения" Кто-нибудь сталкивался с этим? Какие-нибудь есть идеи почему это может быть? Методом проб и ошибок нашел, что виновна функция OnCalc. Но Какие методы вызывают ошибку найти не могу. Помогите пожалуйста, т.к. без OnCalc в-общем-то программа и не нужна. Спасибо.
Автор: DUMAND
Дата сообщения: 22.09.2005 11:04
Вот что получилось. Работает. Спасибо.

Код: procedure Tform1.Button1Click(Sender: TObject);
begin
try
MyIni := TIniFile.Create('Users/pacient.dat');

MyIni.WriteString('Common','Family',FamilyEdit1.text);
MyIni.WriteString('Common','Name',NameEdit2.text);
MyIni.WriteString('Common','SecondName',SecondNameEdit3.text);
MyIni.WriteString('Common','Login',LoginEdit4.text);
..................
finally
MyIni.Destroy;
end;
end;


procedure TForm1.LoadButtonClick(Sender: TObject);
begin

try
MyIni := TIniFile.Create('Users/pacient.dat');

FamilyEdit1.text:=MyIni.ReadString('Common','Family','');
NameEdit2.text:=MyIni.ReadString('Common','Name','');
SecondNameEdit3.text:=MyIni.ReadString('Common','SecondName','');
LoginEdit4.text:=MyIni.ReadString('Common','Login','');
.....................................

finally
MyIni.Destroy;
end;

end;

end.

Автор: SergeBS
Дата сообщения: 22.09.2005 16:45
zvyagaaa
fido.delphi.db - там FAQ. LookupCache false-> true.

Добавлено:
DUMAND
Мой тебе совет: пока не поздно, пока много не наворотил, работая с текстовыми файлами, переходи на простенькую БД табличного типа. Все равно ведь когда-то захочешь статистику посмотреть, быстрый поиск поиметь и т.п. А с текстом такое - титанический ненужный труд.
Для перехода понадобится один раз сделать простенькую конвертилку Анкета-Dbf и обратно. И все.
Завтра возможно будет время - нашлепаю тебе образчик, как это может быть.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


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