Форум по 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,003
Версия 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).
Так там же всё просто, прописываеш желаемую надпись хинта и включаеш (делаеш видимым) его.
Ответить с цитированием
  #8  
Старый 27.01.2010, 14:43
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию

Я знаю, как делать, но проблема в другом.
Цитата:
Сделал паре кнопок подсказки, но они исчезают через пару секунд,и также при малейшем движении мыши. Есть ли аналог подсказкам, или же можно как-то увеличить их время ?
Подсказки есть,но они неудобочитаемы.
Кстати, нашёл команду, благодаря которой смогу реализовать смену стиля.
Если что, она:
Код:
<ИМЯ>.Color:= <НАЗВАНИЕ_ЦВЕТА>
Так же я сделаю и с стилем границ (BorderStyle), и со многими другими параметрами. В результате при нажатии кнопки будет менятся стиль все проги, реализован будет через смену параметров у всех форм программы.
Ответить с цитированием
  #9  
Старый 27.01.2010, 16:17
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Цитата:
Сообщение от nwm
Так там же всё просто, прописываеш желаемую надпись хинта и включаеш (делаеш видимым) его.
Вообщето вопрос звучал
Цитата:
2 Можно ли каким-то образом изменить параметры всплывающего Hint'a? Сделал паре кнопок подсказки, но они исчезают через пару секунд,и также при малейшем движении мыши. Есть ли аналог подсказкам, или же можно как-то увеличить их время ?

Guzerus посмотри свойство StatusBar.AutoHint или используй ApplicationEvents.OnHint ( пример: Подсказка в строке состояния )
Еще у Application есть свойства настройки Hint-ов:
HintHidePause - время до закрытия Hint
HintPause - время до появления подсказками.
и еще несколько.
Цитата:
1 У меня есть два RadioButton'а. При перключении на один из них, другой становится выключенным. Как это убрать?
Может Тебе нужен CheckBox
Ответить с цитированием
  #10  
Старый 27.01.2010, 20:17
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию

s0Creator , спасибо. Посмотрю свойства. По поводу ЧекБокса, то бишь галочки.
Смысл вот в чём. При выходе из программы она говорит "До новых встреч!" . И в настройках будет где-то так.
Прощание. (Вкл-RButton) (Выкл-RButton)
Концепция RButton'oв мне кажется более подходящей, так как нельзя и включить, и выключить прощание. Можно конечно так.
Прощание (Выкл-Галочка)
И при убирании галочки оно Вкл.
Ответить с цитированием
  #11  
Старый 27.01.2010, 21:19
Аватар для Chuwis720
Chuwis720 Chuwis720 вне форума
Прохожий
 
Регистрация: 22.09.2009
Сообщения: 28
Репутация: 10
По умолчанию

Народ, HELP!
Я пытаюсь заставить поток двигать ПрогрессБар, но все время подсвечивается строка:
Код:
  TThread = class(TThread)
И внизу надпись: "Type 'TThread' is not yet completely defined".
Что делать?? %(
Ответить с цитированием
  #12  
Старый 27.01.2010, 21:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Chuwins720, а ты как хотел?
Ты же пытаешься сделать наследника класса с тем же именем, что и предок. Измени имя наследника... Ну и закрой определение класса

ЗЫ. И не надо писать в чужой теме.
Ответить с цитированием
  #13  
Старый 27.01.2010, 23:11
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Цитата:
Сообщение от Guzerus
... По поводу ЧекБокса, то бишь галочки.
Смысл вот в чём. При выходе из программы она говорит "До новых встреч!" . И в настройках будет где-то так.
Прощание. (Вкл-RButton) (Выкл-RButton)
Концепция RButton'oв мне кажется более подходящей, так как нельзя и включить, и выключить прощание. Можно конечно так.
Прощание (Выкл-Галочка)
И при убирании галочки оно Вкл.
Если по RadioButton еще не решил вопрос - объясни по подробнее.

Программно форму можно удалить так Form2.Free; или FreeAndNil(Form2). Только потом не обращайся к ее свойствам, пока вновь не создашь.
Ответить с цитированием
  #14  
Старый 28.01.2010, 17:31
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию

С RButton'ом ещё не пробовал, всё братья сидят да играются. Спасибо за информацию по форме, правда я уже тупанул и снёс проект. Теперь по второму разу пишу калькулятор этот. Хочу уже к массивам перейти, но нельзя.
Ответить с цитированием
  #15  
Старый 28.01.2010, 22:33
Guzerus Guzerus вне форума
Прохожий
 
Регистрация: 22.01.2010
Сообщения: 20
Репутация: 10
По умолчанию

Возник очередной вопрос. Можно ли читать данные из другой формы? Поясню.
Вот пример.
Код:
begin
if (Edit2.Text='0') or (Edit2.Text='')then
ShowMessage ('Операция недопустима!')
else
.....
Можно ли сделать проверку на текст, но написанный в Едите2 другой формы, не той, что открыта?
Ещё один пример.
Форма1.
Пользователь вводит данные в Едит1, например цифру 8. Потом он переходит к форме2, и там пишется "Ваше число 2."
Это лишь пример. Поэтому не говорите мне о глупости реализации, я знаю, что можно не открывать новую форму, а сделать Label.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter