|
|
#1
|
|||
|
|||
Вопросы по Дельфи
Здравствуйте, уважаемые программисты. Недавно открыл для себя Дельфи, в школе учим, как искать слова в Гугле ( ), поэтому программы пишу в качестве хобби, на своём энтузиазме. Опыт небольшой, но желаю его усовершенствовать. Возникли несколько вопросов,если найдутся другие, буду писать здесь же.
Итак, начнём. Пишу небольшой калькулятор, решил начать с него. В ходе разработки возникли пара вопросов. 1 У меня программа вычисляет корни уравнения. С помощью дискриминанта. Я сделал проверку,и если D<0 ,то выдаётся сообщение, что корней нет. Но после выдачи этого сообщения, вылезает ещё одно, мол "Invalid pointing float operation". Прошу прощения, если где-то ошибся, интернет и Дельфи на разных компах,я по памяти перепечатываю. Вопрос: Как убрать это сообщение? 2 Нашёл весьма и весьма занятную функцию. XPManifest. Делает кнопки другого стиля. Вопрос: Можно ли изменить кнопки не только на стиль ХР, а сделать их,скажем, с острыми углами? И если да, то как? 3 Можно ли сделать так,чтобы при нажатии кнопки менялось оформление программы? То есть чтобы при нажатии ХРМанифест уничтожался, а при повторном- создавался. И если можно,то как? Я писал <ИМЯ>.Destroy ,но при этом выдаётся ошибка. Если нужно,приведу позже её. 4 Есть процедура,и в ней проверка. Код:
begin if (Edit2.Text='0') or (Edit2.Text='')then ShowMessage ('Операция недопустима!') else ..... При этом кнопок у меня три,и в каждой эта проверка. Уверен на 100%,что можно написать функцию,и сделать в процедуре проверку на эту функцию,чтобы лишний раз не писать. Подскажите,пожалуйста,функцию. Сам я не очень пока разбираюсь. Надеюсь увидев пример,смогу сориентироваться. Понимаю,что заставлять других писать функции не правильно, но я просто не могу додумать. Был бы стократ благодарнее, если бы не написали её,а скорее подтолкнули меня в нужном направлении. Но написать всегда легче, чем объяснить. С уважением, надеюсь на помощь и понимание. |
#2
|
|||
|
|||
1. Это значит, что у тебя, скорее всего, после сообщения программы пытается продолжить вычисления. Можно сделать так:
Код:
D := b*b - 4*a*c; // кажется, так if (D < 0) Then ShowMessage('Корней нет') Else Begin X1 := (-b + sqrt(D))/(2*a); X2 := (-b - sqrt(D))/(2*a); ShowMessage('X1 = ' + FloatToStr(X1) + #13#10 + 'X2 = ' + FloatToStr(X2)); End; 2 и 3. Нет, так не получится. Дело в том, что компонент XPManifest - это просто, по сути, файл манифеста, который "вкомпиляется" в исполняемый модуль и обрабатывается в момент старта программы. Если хочешь, что бы программа меняла свой вид, то тебе понадобится специальная библиотека компонент для этого. Но советывать какую-либо сейчас не буду. Для большинства программ стандартный вид, "унаследованный" от текущих настроек операционной системы более подходит. На эту тему, если владеешь английским, есть неплохие статьи на сайте Микрософт по поводу дизайна UI. 4. Ну тут вопрос архитектуры программы. Если у тебя ОДНА И ТА ЖЕ проверка нужна для всех кнопок - то выносишь ее в отдельную функцию и из обработчика событий вызываешь ее. Не забудь так же при срабатывании проверки открлючить дальнейшее выполнение кода обработчика. Например: Код:
function TForm1.CheckEdit2 : Boolean; begin Result := False; if (Edit2.Text='0') or (Edit2.Text='') then ShowMessage ('Операция недопустима!') else Result := True; end; procedure TForm1.Button1Click(Sender : TObject); begin if CheckEdit2 Then Begin // Специфический код для кнопки 1 End; end; procedure TForm1.Button2Click(Sender : TObject); begin if CheckEdit2 Then Begin // Специфический код для кнопки 2 End; end; |
#3
|
|||
|
|||
1 У меня так и есть,за исключением того,что нет вegin после else. Тем не менее добавил,и получилось. Выводы таковы.
Если мы просто пишем else, то операция выполняется,, а если ещё и вegin, то он эту операцию начинает выполнять при этом условии, у меня он уже начинал выполнять, поэтому и сообщал, у тебя же он только начинает выполнять, поэтому при D<0 он выдаёт сообщение, и всё. Верно я понял? 2,3 Понял, благодарю. 4 Понял из этой функции вот что. Для продолжения работы программе нужна истина, true. Изначально же мы этой функцией делам ложь, и лишь если кнопка нам подходит, мы даём добро программе. Получается, Result:= False запрещает что-либо делать,а True разрешает? P.S. Вместо b*b у меня Sqr(b). Последний раз редактировалось Guzerus, 26.01.2010 в 20:41. |
#4
|
|||
|
|||
Ещё два вопроса.
1 У меня есть два RadioButton'а. При перключении на один из них, другой становится выключенным. Как это убрать? Делаю настройки для калькулятора, и не хочу, чтобы одна настройка начисто сбивала другие. 2 Можно ли каким-то образом изменить параметры всплывающего Hint'a? Сделал паре кнопок подсказки, но они исчезают через пару секунд,и также при малейшем движении мыши. Есть ли аналог подсказкам, или же можно как-то увеличить их время ? Последний раз редактировалось Guzerus, 26.01.2010 в 23:37. |
#5
|
||||
|
||||
1.
Код:
radiobutton.checked:=true/false; Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#6
|
|||
|
|||
Понятно, спасибо.
Как можно удалить созданную форму? |
#7
|
|||
|
|||
Цитата:
Новый файловый хостинг. |