Вопрос № 60909: Доброе время суток эксперты!
У меня в программе вместо кнопок используется TImage.
Есть разные картинки на разные состояния. Как сделать так, чтобы картинка заменялась другой плавно?
Скины не предлагайте использовать.
Заранее спасибо...Вопрос № 60920: Есть такая функция, которой можно регулировать количество знаков после запятой. Я не могу понять как она работает. Я хочу чтобы она выдавала числа с 4-мя знаками после запятой. Но не получается. Вчем ошибка?
Вот что получается:
-89,60923...Вопрос № 60927: Здравствуйте уважаемые эксперты!
Как можно вытащить какие-либо ресурсы из чужого экзешника. Мне нужно достать рисунки из одной программы. Нужно определить количество этих рисунков и сохранить их в отдельные файлы....Вопрос № 60933: Здравствуйте! Подсказите как проверить число в строке ListBox или нет. Причем число может быть как целым, так и с десятичной частью... Если значение слово, или число с процентами, или число со спец знаком то выдать сообщение об уточнении значения....Вопрос № 60962: Здраствуйте! Помогите пожалуйста!
Мне необходимо считать с COM-порта данные.
И поместить их в переменную data_com:string;
Заранее благодарен!...Вопрос № 60963: Здравствуйте уважаемые эксперты!
Подскажите, как можно сохранить ADOConnection.ConnectionString в файл (как текст), или в реестр?? Проблема в том, что это WideString, а с этим типом ничего сделать не могу ((...Вопрос № 61002: Здравствуйте уважаемые эксперты!
Как загрузить SQL-запрос из файла? Используется ADOQuery. Проблема в том что ADOQuery.SQL - типа TWideStrings (и delphi ругается на несоответсвие типов, например, при загрузге из INI-файла (TIniFile))...
Вопрос № 60.909
Доброе время суток эксперты!
У меня в программе вместо кнопок используется TImage.
Есть разные картинки на разные состояния. Как сделать так, чтобы картинка заменялась другой плавно?
Скины не предлагайте использовать.
Заранее спасибо. Хочется тероию или практику. ;-)
Отправлен: 01.11.2006, 13:57
Вопрос задал: Delphin (статус: Студент)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Маренич Владимир
Здравствуйте, Delphin!
Что означает "плавно"?
По теории: вспомните как делаются рисованные мультфильмы :)
На правктике: нарисуйте промежуточные картинки и последовательно заменяйте в TImage.
Попробуйте анимированные GIF-ы, но нужно компонент другой (например, из RXLib TRxGifAnimator).
Еще можно другим способом: перерисовывать новое состояние по точкам в случайном порядке. Т.е. выбираем случайным образом X и Y, заменяем этот пиксел в старой картинке на пиксел из новой. И так 2*<количество пикселей> раз. Потом заменяем картинку целиком. Может получится симпатично.
Творческих успехов :)
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 01.11.2006, 14:38 Оценка за ответ: 5 Комментарий оценки: Это ближе к делу. Попробую.
Отвечает: PaVeL_Ekt
Здравствуйте, Delphin!
Смотря как плавно, можно использовать эффект выкатывания
например справа
For i:= 1 to image1.width do
begin
image1.canvas.draw(i,0,BitMap);
Sleep(10); {задержка чтобы не быстро выезджала в милисекундах правда она прогу полностью стопорит, но можно на крайняк через таймер сделать}
end;
Если посложнее см в примере, там заполнение формы точками но код не доделан, некогда. Нужна проверка на присутствие изменений в точке.
Приложение:
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 01.11.2006, 14:41 Оценка за ответ: 4 Комментарий оценки: Переход нужен, а не выкат.
Отвечает: Gladiator
Здравствуйте, Delphin!
//Функция загрузки изображения из ресурсов программы
procedure LoadBMPImage(Instance: cardinal; const ResName: PChar; Image: TImage);
var Picture: TBitmap;
begin
try
Picture:=TBitmap.Create;
Picture.LoadFromResourceName(Instance,ResName);
Image.Picture.Assign(Picture)
finally
Picture.Free
end;
end;
//Процедура рисования текста
procedure SetText(const FontColor: TColor; BtnText: string; Image: TImage);
var Size: tSize;
OffSet: DWord;
begin
Size:=Image.Canvas.TextExtent(BtnText);
Offset:=MakeWord((Image.Height - Size.cy) div 2,
(Image.Width - Size.cx) div 2);
Image.Canvas.Brush.Color := clBtnFace;
Image.Canvas.Font.Color := FontColor;
Image.Canvas.TextOut(Hi(OffSet),Lo(OffSet),BtnText);
end;
//Нажатие на Image1
procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
LoadBMPImage(hInstance,'ID_BMP2',TImage(Sender)); //картинка нажатой кнопки
SetText(clBlue,,'Кнопка нажата',Image1)
end;
end;
//Отпускание на Image1
procedure TForm1.ImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
LoadBMPImage(hInstance,'ID_BMP1',TImage(Sender)); //картинка отжатой кнопки
SetText(clBlue,'Кнопка отпущена',Image1) //Установка текста
end;
end;
Ответ отправил: Gladiator (статус: 5-ый класс)
Ответ отправлен: 01.11.2006, 14:45 Оценка за ответ: 4 Комментарий оценки: Нужен сам эфект перехода, а не реализация смены картинки ;-)
Вопрос № 60.920
Есть такая функция, которой можно регулировать количество знаков после запятой. Я не могу понять как она работает. Я хочу чтобы она выдавала числа с 4-мя знаками после запятой. Но не получается. Вчем ошибка?
Отвечает: Mexes
Здравствуйте, Иванов Михаил Викторович!
Функция FloatToStrF для этого не совсем подходит. Вы указываете количество значащих цифр 6, тогда число 12345.678 будет преобразовано в '12345.7', потому что семерка будет уже седьмой значащей цифрой. Использование ffFixed тоже не спасает ситуацию, потому что просто представление просто будет дополнено нулями ('12345.70')
Если речь о форматировании строкового представления, а не округлении числа, то предалагю использовать FormatFloat:
X:=FormatFloat('0.0000',S);
Ответ отправил: Mexes (статус: 5-ый класс)
Ответ отправлен: 01.11.2006, 16:07
Отвечает: PaVeL_Ekt
Здравствуйте, Иванов Михаил Викторович!
попробуйте воспользоваться функцией
formatFloat('0.0000', 4.112455332);
эта работает !!!
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 01.11.2006, 16:08
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Иванов Михаил Викторович!
Есть более универсальная функция - Format (возвращает string)
В приложении пример использования.
Почитайте еще справку по ней - там есть кое-что полезное.
Здравствуйте уважаемые эксперты!
Как можно вытащить какие-либо ресурсы из чужого экзешника. Мне нужно достать рисунки из одной программы. Нужно определить количество этих рисунков и сохранить их в отдельные файлы.
Отправлен: 01.11.2006, 16:11
Вопрос задал: Larkin (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Larkin!
Как это сделать на Delphi - не знаю.
Но если вам не надо автоматизировать процесс извлечения ресурсов, можете воспользоваться программой ExeScope.
--------- Не узнаешь - не попробуешь.
Отвечает: Mexes
Здравствуйте, Larkin!
Картинки бывают разные.
Вот как можно вытащить bmp.
Howto:
* убедитесь, что путь к файлу в LoadLibrary верен;
* убедитесь, что путь, указанный в bmp.SaveToFile, существует;
* запустите - получите список bmp-шек, именованных по названию ресурса или его номеру (#xxx.bmp).
С подсчетом, думаю, сами разберетесь.
Приложение:
Ответ отправил: Mexes (статус: 5-ый класс)
Ответ отправлен: 01.11.2006, 17:21
Отвечает: Олекса aka SoW
Здравствуйте, Larkin!
К предыдущему ответу прибавлю еще какие типы ресурсов может искать функция (см. приложение).
Также еще существует функция EnumResourceTypes которая осуществляет перебор всех доступных ресурсов в программе (то есть, ресурсов всех типов).
Приложение:
--------- Вiк живи - вiк учись.
Ответ отправил: Олекса aka SoW (статус: 2-ой класс)
Ответ отправлен: 02.11.2006, 05:54
Вопрос № 60.933
Здравствуйте! Подсказите как проверить число в строке ListBox или нет. Причем число может быть как целым, так и с десятичной частью... Если значение слово, или число с процентами, или число со спец знаком то выдать сообщение об уточнении значения.
Отвечает: Томша Павел
Здравствуйте, Артемова Марина!
Можно например считать значение в строку, пробежаться по ней циклом и проверить...
S - строка из ListBox'а
i - переменная типа word или byte
a - boolean, результат. Если true, то число
Приложение:
Ответ отправил: Томша Павел (статус: 3-ий класс)
Ответ отправлен: 01.11.2006, 17:12
Отвечает: Юрий Викторович
Здравствуйте, Артемова Марина!
из хелпа Delphi
procedure Val(S; var V; var Code: Integer);
Description
Val converts the string value S to its numeric representation, as if it were read from a text file with Read.
S is a string-type expression; it must be a sequence of characters that form a signed real number.
V is an integer-type or real-type variable. If V is an integer-type variable, S must form a whole number.
Code is a variable of type Integer.
If the string is invalid, the index of the offending character is stored in Code; otherwise, Code is set to zero.
Проверяете значение Code на равенство нулю.
Ответ отправил: Юрий Викторович (статус: 1-ый класс)
Ответ отправлен: 01.11.2006, 17:36
В примере функция которая определит тип данных, (строка, число, дробное число)
Приложение:
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 02.11.2006, 07:13
Вопрос № 60.962
Здраствуйте! Помогите пожалуйста!
Мне необходимо считать с COM-порта данные.
И поместить их в переменную data_com:string;
Заранее благодарен!
Отправлен: 01.11.2006, 20:30
Вопрос задал: Luminarc (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: chikanok
Здравствуйте, Luminarc!
Для того что-бы считать нужно открыть порт функцией CreateFile(описание в приложении), после читать функцией Readfile, также можно очистить буфер порта функцией PurgeComm. Так как вам надо в строку то я думаю символами то переменую buf прогоняем через chr {data_com[i]:=chr(buf);}, а если в томже виде то через inttostr {data_com:=' '+inttostr(buf);}. Все функции находятся в Windows.pas.
Удачи!
Приложение:
--------- Главное желание,а там разберёмся!
Ответ отправил: chikanok (статус: 2-ой класс)
Ответ отправлен: 01.11.2006, 21:25
Отвечает: Олекса aka SoW
Здравствуйте, Luminarc!
Я лично для работы с com-портом использую очень мощный компонент Com32
(http://www.dxfania.boom.ru/stuff/delphi/components/com32.rar).
Для получения данных нужно создать обработчик события OnReceiveData компонента Com32, который будет вызываться каждый раз, когда на порт приходят какие-либо данные.
Приложение:
--------- Вiк живи - вiк учись.
Ответ отправил: Олекса aka SoW (статус: 2-ой класс)
Ответ отправлен: 02.11.2006, 06:12
Отвечает: PaVeL_Ekt
Здравствуйте, Luminarc!
Очень много про работу с портами написано
http://delphiworld.narod.ru/
и примеров куча, и методов программирования, выбирай любой !!!
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 02.11.2006, 07:21
Вопрос № 60.963
Здравствуйте уважаемые эксперты!
Подскажите, как можно сохранить ADOConnection.ConnectionString в файл (как текст), или в реестр?? Проблема в том, что это WideString, а с этим типом ничего сделать не могу ((
Отправлен: 01.11.2006, 20:52
Вопрос задал: Koven (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, Koven!
Когда Вы создаете строку соединения, нажав на кнопочку возле свойства ConnectionString, то первым делом Вам предлагается либо самому вручную создать строку подключения, либо загрузить ее из файла.
Для загрузки из файла, Вам нужно любым доступным Вам способом создать файл с расширением .udl. Затем в проводнике щелкнуть мышкой по нему два раза, он откроется и Вы увидите стандартное окно настройки соединения. После того как Вы все настроили, можно этот файл указывать в качестве параметра в свойстве ConnectionString.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 02.11.2006, 06:16 Оценка за ответ: 5 Комментарий оценки: отлично! спасибо Вам огромное! Ваши ответы всегда больше чем ответы! )
Отвечает: PaVeL_Ekt
Здравствуйте, Koven!
Данный пример показывает, что WideString это все-таки String и работать с ним можно без особых проблем
Приложение:
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 3-ий класс)
Ответ отправлен: 02.11.2006, 06:41 Оценка за ответ: 5
Отвечает: Олекса aka SoW
Здравствуйте, Koven!
В приложении дан пример, как можно сохранить ету строку в файл и в реестр. Для работы с реестром нужно подключить модуль Registry. Строка вносится в раздел HKCUSoftwareRazdel
Приложение:
--------- Вiк живи - вiк учись.
Ответ отправил: Олекса aka SoW (статус: 2-ой класс)
Ответ отправлен: 02.11.2006, 11:02
Вопрос № 61.002
Здравствуйте уважаемые эксперты!
Как загрузить SQL-запрос из файла? Используется ADOQuery. Проблема в том что ADOQuery.SQL - типа TWideStrings (и delphi ругается на несоответсвие типов, например, при загрузге из INI-файла (TIniFile))
Отправлен: 02.11.2006, 09:06
Вопрос задал: Koven (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)