Замена стандартной функции messagebox()
Отличия:
- собственные наборы кнопок (помимо стандартных);
- собственные картинки (помимо стандартных);
- выделение любых частей сообщения цветом и/или шрифтом;
- выравнивание текста влево, по центру, вправо;
- возможность реализации многоязычного интерфейса;
- возможность приведения внешнего msgbox() к единому стилю приложения.
Привет!
Решение мне понравилось. Но для себя все равно сделал свое. Однако хочу отметить следующее - в
решении не хватает звукового сопровождения, ведь стандартная функция MessageBox() с агрументами
16,32,48 выдает соответствующие звуки текущей темы. Как определить какой звук в текущей теме (ХР)
соответствует текущему событию я не знаю. Зато знаю как проиграть звук - для этого можно
использовать описанный здесь в решениях способ через SET BELL TO/CHR(7), но я использую WinAPI
решение:
FUNCTION PlayWav
LPARAMETERS tcWavFile
tcWavFile = UPPER(ALLTRIM(m.tcWavFile))
IF RIGHT(m.tcWavFile,4) # ".WAV"
tcWavFile = m.tcWavFile + ".WAV"
ENDIF
IF !FILE(m.tcWavFile)
RETURN
ENDIF
*#DEFINE SND_SYNC 0
*#DEFINE SND_ASYNC 1
*#DEFINE SND_NODEFAULT 2
*#DEFINE SND_MEMORY 4
*#DEFINE SND_LOOP 8
*#DEFINE SND_NOSTOP 16
DECLARE INTEGER sndPlaySound IN winmm STRING lpszSound, INTEGER fuSound
sndPlaySound(tcWavFile,1+4)
CLEAR DLLS 'sndPlaySound'
ENDFUNC
Вот. И еще не хватает, раз уж это кастомный msgbox такого чекбокса, типа "Больше не показывать это
сообщение". Оно, безусловно, напрямую связано с созданием и работой с соотв. бд, но все же.
И еще такой прикол. Когда для вывода сообщения используешь Label, то размер его в пикселях можно
узнать задав ему Autosize, у себя я так и сделал. И тогда не нада мучаться с определением размера
шрифтов и все такое.
XAndy
15.09.08 13:00:03
Привет! Как появится момент, добавлю и звук и чекбокс "больше не показывать", спасибо за идею.
Label.Autosize, кстати, и используется ;)
VictorK
15.09.08 19:49:10
Очень интересное решение. Но у меня возникла проблема при компиляции в арр. MSGBOX не появляется
на экране. В чем может быть проблема так и не понял, а так очень хорошая замена родного messagebox.