Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.01.2010, 20:00
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию Вопросы по Дельфи

Здравствуйте, уважаемые программисты. Недавно открыл для себя Дельфи, в школе учим, как искать слова в Гугле ( ), поэтому программы пишу в качестве хобби, на своём энтузиазме. Опыт небольшой, но желаю его усовершенствовать. Возникли несколько вопросов,если найдутся другие, буду писать здесь же.
Итак, начнём.
Пишу небольшой калькулятор, решил начать с него. В ходе разработки возникли пара вопросов.
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  
Старый 26.01.2010, 20:13
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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  
Старый 26.01.2010, 20:28
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию

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  
Старый 26.01.2010, 23:31
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию

Ещё два вопроса.
1 У меня есть два RadioButton'а. При перключении на один из них, другой становится выключенным. Как это убрать?
Делаю настройки для калькулятора, и не хочу, чтобы одна настройка начисто сбивала другие.
2 Можно ли каким-то образом изменить параметры всплывающего Hint'a? Сделал паре кнопок подсказки, но они исчезают через пару секунд,и также при малейшем движении мыши. Есть ли аналог подсказкам, или же можно как-то увеличить их время ?

Последний раз редактировалось Guzerus, 26.01.2010 в 23:37.
Ответить с цитированием
  #5  
Старый 27.01.2010, 00:19
Аватар для Лунтик-Некрофил
Лунтик-Некрофил Лунтик-Некрофил вне форума
Начинающий
 
Регистрация: 28.09.2009
Сообщения: 165
Репутация: 12
По умолчанию

1.
Код:
radiobutton.checked:=true/false;
2. Когда-то пытался сделать свои подсказки(про hint не знал и не знаю), брал просто лайблы и подгонял их сначала в невиде, при наведении мыши выводил из невида(visible:=true).
__________________
Алкоголик-аморал, явная угроза обществу
Блин, я уже местный, а все равно нифига не знаю...
Ответить с цитированием
  #6  
Старый 27.01.2010, 00:23
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию

Понятно, спасибо.
Как можно удалить созданную форму?
Ответить с цитированием
  #7  
Старый 27.01.2010, 14:17
nwm nwm вне форума
Прохожий
 
Регистрация: 18.11.2009
Сообщения: 23
Репутация: 10
По умолчанию

Цитата:
Сообщение от Лунтик-Некрофил
1.
Код:
radiobutton.checked:=true/false;
2. Когда-то пытался сделать свои подсказки(про hint не знал и не знаю), брал просто лайблы и подгонял их сначала в невиде, при наведении мыши выводил из невида(visible:=true).
Так там же всё просто, прописываеш желаемую надпись хинта и включаеш (делаеш видимым) его.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter