Вопрос № 35604: Снова образовался вопрос. Я компилирую 2 иконки 32х32 256цветов в ресурс. Пытаюсь их достать через TResourceStream.Create(HInstance,'ICON1',RT_GROUP_ICON), но достаются только черные 32х32 квадратики. Такое ощущение, что они добываются, как 16 цветов...Вопрос № 35615: Здравствуйте!
Как сделать чтобы кнопки были как в XP? (Delphi 7)
Спасибо!...Вопрос № 35635: Добрый день!!!
В принципе я мог бы не изобретать велосипед и воспользоваться вещами общепринятыми но хочется знать все.
Вопрос такой.
Проектирую многооконный интерфейс MDI, допустим какой нибудь редактор текстов.
В принцип...Вопрос № 35639: Здравствуйте!
Скачал SUIPack 5.83, при установки(где выбираеш какая версия Delphi) выдается ошибка:
Please move your SUIPack to the derictory that no space in the path name.
Помогите, почему оно не устанавливается
Заранее благодарен!...Вопрос № 35646: Здравствуйте господа эксперты! Расскажите пожалуйста как пользоваться исключениями. И еще есть ли возможность обработать результат процедуры..... даже если она ничего не возращает. ТО есть нормально она отработала или нет.... или вообще не отработала...Вопрос № 35648: Здравствуйте! Подскажите плиз..
Имеется программа кот. заполняет таблицу из файла .dat или вручную пользователем. Таблица состоит из двух колонок.Для того чтобы осуществить ввод вручную пользователь вводит первое число в первую строку первого сто...Вопрос № 35665: Здравствуйте! Помогите разобраться с работой Word'a из Delphi. Нашла ссылку http://www.kornjakov.ru/stat.htm
в ней все функции описаны достаточно понятно, но сразу же при описании первой функции:
uses ComObj;
var W:variant;
Funct...
Вопрос № 35.604
Снова образовался вопрос. Я компилирую 2 иконки 32х32 256цветов в ресурс. Пытаюсь их достать через TResourceStream.Create(HInstance,'ICON1',RT_GROUP_ICON), но достаются только черные 32х32 квадратики. Такое ощущение, что они добываются, как 16 цветовые. Вопрос: Что надо сделать, чтобы запихать 256 32х32 иконки в кол-ве 2 штук в ресурс и как их потом без потерь достать.
Заранее спасибо.
PS Использую Delphi7 и его ImageEditor
Отправлен: 17.02.2006, 12:00
Вопрос задал: Steel (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ерёмин Андрей
Здравствуйте, Steel!
Попробуйте воспользоваться более приспособленными утилитами. Image Editor как раз 16 цветов и оставляет, ибо это очень старый редактор. Используйте программу AX-Icons или AWIcons. Лично я предпочитаю AWIcons. Хорошая программа! И для упаковки файлов в ресурсы тоже возьмите что-нибудь посолиднее. Resource Hacker например.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 17.02.2006, 13:24 Оценка за ответ: 4 Комментарий оценки: Вы ничего не ответили про то как эти иконки выковыривать.
Вопрос № 35.615
Здравствуйте!
Как сделать чтобы кнопки были как в XP? (Delphi 7)
Спасибо!
Отправлен: 17.02.2006, 14:23
Вопрос задал: [TiER] (статус: 1-ый класс)
Всего ответов: 8 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лучников Юрий Владимирович
Здравствуйте, [TiER]!
Для этого просто положите компоненту XPManifest с вкладки Win32 на форму. Вот и все;)
Отвечает: Ерёмин Андрей
Hello, TiER!
1) Визуальный метод - на странице Win32 компонент TXPManifest. Достаточно положить на форму единожды.
2) Невизуальный метод - подключить модуль XPMan, добавив его в uses. Это на случай, если не хочется, чтобы лишний значок торчал на форме.
3) Windows-метод: добавить в папку с программой файл *.exe.manifest, где ваше приложение (файл) имеет имя *.exe, например для myprog.exe нужно переименовать файл в myprog.exe.manifest. Сам этот файл лежит в каталоге WINDOWS и имеет расширение .manifest. Думаю, быстро найдёте.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 17.02.2006, 16:23
Отвечает: Delphin
Здравствуйте, [TiER]!
На палитре компонентов есть компонента TXPManifest, кинь её на форму и все будет ок.
--------- Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: Студент)
Отправлен: 17.02.2006, 16:41
Отвечает: Diman_A
Здравствуйте, [TiER]!
Если речь идет об отображении контролов в Windows XP, то действуем так:
Шаг 1
Создаем файл winxp.manifest с таким содержанием:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="BluecaveSoftware.BarMenus.Demo1"
type="win32"
/>
<description>BarMenus Demo1</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Шаг 2
В той же директории создаем файл winxp.rc
В нем пишем:
1 24 "WinXP.manifest"
Шаг 3
компилируем rc файл в файл ресурсов: brcc32.exe [путь к rc-файлу]
Шаг 4
Прилинковываем полученный файл winxp.res к программе:
{$r winxp.res}
Все!
Но если нужно, чтобы контролы выглядели по xp-шному, например, в 98 виндах, то нужно юзать скиновые компоненты. Например, я использую Suipack http://www.sunisoft.com/
Ответ отправил: Diman_A (статус: 5-ый класс)
Отправлен: 17.02.2006, 17:13
Отвечает: Николай Б.
Здравствуйте, [TiER]!
Допиши в раздел Uses "XPMan"
Или добавь его значок на форму со вкладки Win32
--------- Лучшая благодарность - отличная (5) оценка за ответ!
Ответ отправил: Николай Б. (статус: 1-ый класс)
Отправлен: 17.02.2006, 18:08
Отвечает: SlavComp
Здравствуйте, [TiER]!
Положите компонент XPManifest из вкладки Win32 на форму.
Или же в разделе Uses подключите модуль XPMan
Удачи!!!
Ответ отправил: SlavComp (статус: 1-ый класс)
Отправлен: 17.02.2006, 20:29
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 18.02.2006, 10:00
Вопрос № 35.635
Добрый день!!!
В принципе я мог бы не изобретать велосипед и воспользоваться вещами общепринятыми но хочется знать все.
Вопрос такой.
Проектирую многооконный интерфейс MDI, допустим какой нибудь редактор текстов.
В принципе для окон можно использовать Page или Tab Control, но я молодой и мне хочется найти другой путь, сделать для контроля отображения MDIChildren-ов кнопки SpeedButton, с использованием всех ее достоинств и "недостатков"
Q1: Как правильно отловить событие OnClick на кнопке, для того чтобы показать, закрыть(управлять) соответствующей ей, MDIChild формой ?
Q2: Честно говоря интересно спросить у знающих, на сколько < или > такая конструкция занимает место в памяти??
Для меня Важно количство занимаемой памяти.
Отвечает: Архангельский Андрей Германович
Здравствуйте, Андрей Темный!
Темны дела твои господи
1) Для того чтобы управлять MDIChild не требуется "отлавливать событие onClick"
Для того чтобы ими управлять есть несколько простых процедур (см. приложение) которые вызываются событием onClick от кнопки или меню. По MDI вообще желательно почитать книжки, чтобы использовать его полноценно.
2) Мне смешно, когда сегодня всерьез обсуждают "количество занимаемой памяти"
Если используется Delphi то наблюдается быстрый рост размера приложения от 200к до 1,5Мб, дальнейший рост резко замедляется. ЕСли используется много одинаковых компонентов, то размер приложения практически не растет.
У меня достаточно сложное приложения с БД, с деревьями, вычислениями и протоколами и я с трудом перевалил за 3.5Мб. Сейчас уже нет компьютеров, для которых такой размер являлся бы какой-то проблемой.
Отвечает: sir henry
Здравствуйте, Андрей Темный!
1. Если честно, даже не знаю чем вызван Ваш вопрос. OnClick не надо отлавливать. Весь код "отлова" уже готов внутри компонента и Вам нужно только событию OnClick присвоить Вашу процедуру. Видимо Вы неправильно сформулировали вопрос.
2. Ну во-первых, какая конструкция? Что Вы под словом "конструкция" имели в виду? Во-вторых, больше или меньше по сравнению с чем? Ведь больше или меньше - это понятия сравнения и сами по себе они не имеют никакого значения.
**********************
Если мой ответ Вас не удовлетворил, то постарайтесь воздержаться от оценки, т.к. правильно заданый вопрос - 50% ответа. Не сердитесь. :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.02.2006, 19:46
Отвечает: Leshiy2006
Здравствуйте, Андрей Темный! Уточните пожалуйста вопрос: У вас для каждой формы создается своя кнопка или я чего-то не понял? Если вопрос именно в этом сообщите, вышлю пример.
Ответ отправил: Leshiy2006 (статус: 2-ой класс)
Отправлен: 17.02.2006, 22:28
Вопрос № 35.639
Здравствуйте!
Скачал SUIPack 5.83, при установки(где выбираеш какая версия Delphi) выдается ошибка:
Please move your SUIPack to the derictory that no space in the path name.
Помогите, почему оно не устанавливается
Заранее благодарен!
Отправлен: 17.02.2006, 19:57
Вопрос задал: [TiER] (статус: 1-ый класс)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, [TiER]!
Please move your SUIPack to the derictory that no space in the path name - Пожалуйста переместите Ваш SUIPack в каталог, путь которого не содержит пробелы.
Англо-русский словарик не хотите купить? Или Lingvo поставить? :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 17.02.2006, 20:25
Отвечает: Delphin
Здравствуйте, [TiER]!
Это значит, что ты должен поместить установщик со всеми фалами в папку ьез пробелов.
Правильно: c:vclsuipack или d:vclsuipack
Не правильно c:vclsui pack
--------- Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: Студент)
Отправлен: 17.02.2006, 20:32
Отвечает: Николай Б.
Здравствуйте, [TiER]!
Нельзя, чтобы в названии директории, в которой размещаюется SUIPack, были пробелы. Перемести
его, например, в директорию "C:SUIPack" и устанавливай оттуда
--------- Лучшая благодарность - отличная (5) оценка за ответ!
Ответ отправил: Николай Б. (статус: 1-ый класс)
Отправлен: 18.02.2006, 08:09
Отвечает: Diman_A
Здравствуйте, [TiER]!
Помести suipack в папку, в пути к которой не пробелов!!!! например, c:suipack
Ответ отправил: Diman_A (статус: 5-ый класс)
Отправлен: 18.02.2006, 09:53
Отвечает: Kazakh
Здравствуйте, [TiER]!
Так ясно же пишет :-)
Please - Пжста
move - переместите
your - ваш
SUIPack - SUIPack
to the derictory - в директорию (папку)
that - у которой
no - нет
space - пробелов
in the - в
path name. - имени.
То есть в папку типа "C:Program FilesSUIPack" или "С:WindowsРабочий столSUIPack" не надо ставить.
На до ставить в папку типа "C:SUIPack".
Учите аглицкий, чтобы хотя бы со словыриком :-)
--------- Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 3-ий класс)
Отправлен: 20.02.2006, 07:15
Вопрос № 35.646
Здравствуйте господа эксперты! Расскажите пожалуйста как пользоваться исключениями. И еще есть ли возможность обработать результат процедуры..... даже если она ничего не возращает. ТО есть нормально она отработала или нет.... или вообще не отработала. Этот вопрос касается только Borlandовских процедур.
Отвечает: Ерёмин Андрей
Здравствуйте, Кныш Александр Александрович!
По поводу обработки исключительных ситуаций - нужно использовать try ... except и try ... finally. В прикреплённом файле подробная статья по этой теме.
Насчёт процедуры - если это функция, то она возвращает какое-либо значение. Как правило, это результат выполнения операций, либо логическое значение - true или false. Вот и следует проверять возвращаемое значение на логическое значение.
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 17.02.2006, 21:21
Отвечает: Delphin
Здравствуйте, Кныш Александр Александрович!
Исключениями пользуешся для обработки ошибок.
Доупстим тебе нужно вызвать какую-то процедуру, но ты не знаеш сделается ил она нормально или нет. Тогда ты создаеш такую конструкцию:
try // От сюда
// Сдесь ваши процедуры/функции который надо обрабатывать.
except // До сюда будет все проверяться. При первой же ошибке перейдет за слово except без продоожения выполнений.
// Сдесь вы пишите что произойдет при ошибке.
end;
Можно сделать так:
try // От сюда
// Сдесь ваши процедуры/функции который надо обрабатывать.
finally // Будет выполнено ниже, если не возникло ошибки.
end;
Процедуры не могут возвращать значения. А вот функци могут.
Но ты может в процедуре генерировать ошибку и отлавливать её с помощью try...except/finaly...end;
E : Exception;
E := Exception.Create; {Вроде так, счась не могу проверить. Если не так то попробуй TException. }
--------- Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: Студент)
Отправлен: 17.02.2006, 21:33
Отвечает: sir henry
Здравствуйте, Кныш Александр Александрович!
Обработка исключений используются в двух формах:
1. TRY .. EXCEPT ..END;
2. TRY .. FINALLY .. END;
************************
1. Этот тип собственно основной. Между TRY и EXCEPT записываются те операторы, процедуры и функции, которые могут вызвать фатальную ошибку программы. Например:
var
f: TextFile;
Begin
AssignFile(f, 'somefile.txt');
Try
Reset(F); {Если файл не существует, то будет ошибка}
Except
ShowMessage('Ошибка открытия файла!'); {Это сообщение вылезет в случае, если произошла ошибка}
End;
End;
2. Эта форма используется, если какое-то действие требуется провести независимо от того, возникла ошибка или нет. Это действие выполняют операторы заключенные между FINALLY .. END;
********************************
Проверять действие процедуры можно только если есть какой-то результат. Иначе, согласитесь, как же можно проверить, выполнила процедура какое-то действие или нет. :) Общий принцип строится на этом, а вот что конкретно делать - зависит от того, что Вы хотите делать. :)
Ответ отправил: sir henry (статус: Академик)
Отправлен: 18.02.2006, 06:14
Вопрос № 35.648
Здравствуйте! Подскажите плиз..
Имеется программа кот. заполняет таблицу из файла .dat или вручную пользователем. Таблица состоит из двух колонок.Для того чтобы осуществить ввод вручную пользователь вводит первое число в первую строку первого столбца [1,1] при этом появляется следующая строка - строка 2 за счет процедуры:
procedure TForm1.TAblSetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
begin
if Arow = Tabl.RowCount-1 then
begin
Tabl.Cells[0,Arow]:=inttostr(Tabl.RowCount-1);
Tabl.RowCount:=Tabl.RowCount+1;
end;
end;
В талбице заданны координаты точек, кот. рисуются на Image.
Возникла необходимость при выборе соответсвующей координаты в таблице подсвечивать эту точку на рисунке. Делаю с помощью процедуры:
procedure TForm1.Select(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
Image1.Canvas.Brush.Color:=clblue;
Image1.Canvas.Brush.Style:=bsSolid;
xv:=StrToFloat(TAbl.Cells[1,Arow]);
yv:=StrToFloat(TAbl.Cells[2,Arow]);
Image1.Canvas.Ellipse(trunc(xv* Image1.Width/1000)+200-5,200-trunc(yv*Image1.Width/1000)-5,trunc(xv*Image1.Width/1000)+200+5,200-trunc(yv*Image1.Width/1000)+5);
end;
Программа перестает работать с сообщением:
Project Project3.exe raised exception class EConvertError with message "is not a vaild floating point value'. Process stoped....
Т.е. при вставке второй процедуры программа не работает. Почему?
Причем если убрать первую процедуру, то вторая замечательно выполняет свои функции из чего делаю вывод они друг на друга влияют...но как исключить это влияние?
Задача в том чтобы была подсветка и ручной ввод.
Отправлен: 17.02.2006, 21:57
Вопрос задал: Lazut4ik (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Delphin
Здравствуйте, Lazut4ik!
Долго не думая, понял что проблема в прорисовке елипса.
Округли значеняи координат. Они не могут быть с плавающей точкой.
abs()
--------- Обращаться в ICQ: 66550088 (Ally) или E-Mail: delphinster@gmail.com
Ответ отправил: Delphin (статус: Студент)
Отправлен: 17.02.2006, 22:02
Отвечает: sir henry
Здравствуйте, Lazut4ik!
А переменные xv и yv у Вас какого типа? Почему Вы используете StrToFloat? Вы разве не знаете, что координаты при рисовании задаются целыми числами?
Если координаты у Вас вычисляются, то есть целочисленное деление DIV, используйте его.
Для большей ясности кода используйте предварительное вычисление координат, а в функцию рисования подставляйте уже готовые значения.
var
xv, yv, x1, x2, y1, y2: Integer;
Begin
xv:=StrToInt(TAbl.Cells[1,Arow]);
yv:=StrToInt(TAbl.Cells[2,Arow]);
x1:=xv* (Image1.Width div 1000)+200-5;
y1:=200-(yv*(Image1.Width div 1000))-5;
x2:=xv*(Image1.Width div 1000)+200+5;
y2:=200-(yv*(Image1.Width div 1000))+5;
Image1.Canvas.Ellipse(x1,y1,x2,y2);
End;
Вызывает сильные сомнения использование у Вас как для вычисления Х, так и для вычисления У только Image1.Width. У Вас что Image строго квадратный?
Ответ отправил: sir henry (статус: Академик)
Отправлен: 18.02.2006, 06:46
Отвечает: Ataman N. N.
Здравствуйте, Lazut4ik!
Данное сообщение выдается, возможно, когда выделяется пустая ячейка. Вы пытаетесь прочитать данные с помощью функции StrToFloat и если TAbl.Cells[1,Arow]='', то вот Вам и "is not a vaild floating point value".
В процедуре Select проверяйте содержит ли ячейка число.
Ответ отправил: Ataman N. N. (статус: 7-ой класс)
Отправлен: 18.02.2006, 12:43
Вопрос № 35.665
Здравствуйте! Помогите разобраться с работой Word'a из Delphi. Нашла ссылку http://www.kornjakov.ru/stat.htm
в ней все функции описаны достаточно понятно, но сразу же при описании первой функции:
uses ComObj;
var W:variant;
Function CreateWord:boolean;
begin
CreateWord:=true;
try
W:=CreateOleObject('Word.Application');
except
CreateWord:=false;
end;
End;
Для получения доступа к объекту Word.Application в нашей функции CreateWord используем конструктор CreateOleObject ('Word. Application'). Если редактор Word не установлен в системе, то будет сгенерирована ошибка, и мы получим значение функции = false, если Word установлен, и объект будет создан, то получим значение функции = true.
Возникает модуль ComObj откуда его взять, ОТКУДА ПОДКЛЮЧИТЬ?????:0
Если не можете подсказать с конкретным данным примером, то может быть кто-то может подсказать другой способ работы с Word'ом, можно только поподробнее или ссылочку какую-нить...:)
Заранее спасибо!
Отвечает: sir henry
Здравствуйте, Артемова Марина!
Для именно такого способа работы с Вордом требуется установленный Ворд. Больше никак. Модуль ComObj - стандартный в поставке Дельфи, поэтому Вы его можете просто прописать в строке USES.
Кроме того, если Вы используете Delphi 5 и выше, то на закладке SERVERS находятся компоненты для работы с Офисом, в том числе и с Вордом. Причем как с приложением в целом, так и с документами. Если будете пользоваться этими компонентами, то Дельфи будет Вам высвечивать подсказки по ихним свойствам.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 18.02.2006, 06:25
Отвечает: Ерёмин Андрей
Здравствуйте, Артемова Марина!
Вот здесь почитайте: http://www.delphi.int.ru/?name=articles&action=view&articleid=11. Там много всего про Word. Модуль ComObj включён в дистрибутив Delphi, поэтому он подключается без проблем.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 18.02.2006, 07:34
Отвечает: Diman_A
Здравствуйте, Артемова Марина!
Пропишете модуль ComObj в uses.
Например так: uses ComObj;
Ответ отправил: Diman_A (статус: 5-ый класс)
Отправлен: 18.02.2006, 09:54
Отвечает: Злоумышленник
Здравствуйте, Артемова Марина!
Этот модуль подключается в разделе uses (самая первая строка твоего примера). Этого и есть "подключение". Лучший способ разобраться с работой с Word - купить книжку Василия Корнякова "Программирование документов и приложений MS OFFICE в DELPHI". Настолько всё просто и понятно написано + читать немного. Также желательно знание VBA и умение пользоваться справкой Ворда под программирование на VBA.
--------- Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 3-ий класс)
Отправлен: 19.02.2006, 23:13