Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi 2

Автор: YFred
Дата сообщения: 16.01.2007 11:48
RomanTim
Нет SpeedButton

Если конкретно, то мне нужно следующее. У меня на форме 3 кнопки TSpeedButton и все они привязаны через свойство DropDownMenu к одному меню. Вопрос как узнать что нажатие на кнопку 1 вызвало появление меню, а не 2 или 3????
Пока вижу единственный выход сделать 3 компанента меню, т.е. свой для каждой из кнопок. Вопрос, в том что менюшки для всех кнопок идентичны и мне кажется что есть еще какой-то способ.
Пробовал событие OnClick кнопки, но оно не генерица при нажатии на дополнительную кнопку которая раскрывает меню
Автор: RomanTim
Дата сообщения: 16.01.2007 12:39
YFred
Какая версия делфи? В D10 нет у SpeedButton свойства DropDownMenu (и вообще ничего с таким именем в модуле Buttons)
Но раз есть, попробуй у PopupMenu в OnPopup посмотреть PopupComponent - в случае ToolButton он указывает на конкретную кнопку
Автор: YFred
Дата сообщения: 16.01.2007 13:34
RomanTim
D7
Автор: RomanTim
Дата сообщения: 16.01.2007 13:58
YFred
И в ней не нашел... Если не лень - кинь кусок делфийского модуля (по идее Buttons.pas) с описанием твоего TSpeedButton, прямо таки интересно
Автор: andead
Дата сообщения: 16.01.2007 15:12
2Polkan
могу кинуть метадичку по которой мы, в прошлом году, в инсте, эту тему проходили... пиши пм
Автор: YFred
Дата сообщения: 17.01.2007 08:38
RomanTim
Ты прав у компанента TSpeedbutton нет такого свойства, просто я использовал компанент TsSpeedButton думал что у TSpeedbutton свойство такое тоже есть, оказалось нет. Свою задачу решил через свойство PopupComponent компанента PopupMenu.

У меня другая проблема нарисовалась я в обработчике события onClick компанента TPopupMenu пишу следующее:
var
i:integer;
begin
if TMenuItem(Sender).Name='pm1' then i:=1;
if TMenuItem(Sender).Name='pm2' then i:=2;
end;

В итоге когда я выбираю подпункт например pm1, проверяю значение TMenuItem(Sender).Name оно на самом деле равно 'pm1', но значение i:=1 не пресваивается. Даже не могу понять в чем проблема.
Кстати создал новый проект и смоделировал такую же ситуацию все работает нормально, может глюк Delphi или проблема в проекте????
Автор: oan42
Дата сообщения: 17.01.2007 11:46
YFred
Уберите в опциях компилятора оптимизацию
и еще раз пройдитесь в диалоговом отладчике.

Не следует упоминать о глюках Delphi без серьезного предварительного разбора.
Автор: RomanTim
Дата сообщения: 17.01.2007 12:20
YFred
Может имя компонента в другом регистре? Попробуй не
if TMenuItem(Sender).Name='pm1' then
а
if Sender = pm1 then

Автор: JonyBes
Дата сообщения: 17.01.2007 14:00
Надо вычислить последнюю букву в слове, убрать ее и подставить другую.
Подскажите с чего начать?
Автор: RostY
Дата сообщения: 17.01.2007 14:48
YFred
установи в менюитемах свойство Tag и пиши

i:=(Sender as TMenuItem).Tag;

JonyBes
var slovo:string; bukva:char;
...
slovo[length(slovo)]:=bukva;
Автор: andead
Дата сообщения: 17.01.2007 15:07
oan42
а зачем нужна эта оптимизация?, расскажи в двух словах или подкинь ссылку почитать
Автор: JonyBes
Дата сообщения: 17.01.2007 15:14
RostY
Спасибо сделал так:
S := Copy(slovo,1,Lenght(slovo)-1) + bukva;
Автор: ZalivkoDenis
Дата сообщения: 17.01.2007 15:15
JonyBes
А вот так, если слово в предложении (само-собой -- можно упростить . Так просто понятней ):

function ChangeLastChar(InStr:string; SWord:string; NewLastChar:Char):string;
var
PosLChar:Integer;
Part1, Part2: String;
begin
PosLChar := Pos(AnsiLowerCase(SWord),AnsiLowerCase(InStr));
if PosLChar=0 then begin Result:=InStr;Exit; end;
PosLChar := PosLChar+Length(SWord)-1;
Part1:= Copy(InStr,1,PosLChar-1);
Part2:= Copy(InStr,PosLChar+1,Length(InStr)-PosLChar);
Result := Part1+NewLastChar+Part2;
end;

procedure TForm2.btn_RunClick(Sender: TObject);
begin
// Text = "Теория без практики мертва";
edt_Sentence.Text:=ChangeLastChar(edt_Sentence.Text,'практики','a');
// Text = "Теория без практикa мертва";
end;
Автор: DUMAND
Дата сообщения: 17.01.2007 23:19
Объявляю переменную Vars.Value['ABCD'] :=0.8;
При компилляции ошибка. Не совпадение типов interger и extended.
Как правильно написать?

Автор: FRALX
Дата сообщения: 18.01.2007 00:38
DUMAND
А где собственно обявление переменной ?
Что такое Vars ?
Автор: cyberlv2
Дата сообщения: 18.01.2007 11:18
Друзья, не подскажите-ли линк на ветку, где в шапке были выложены компоненты для Дельфи?
Интересует компонент - Браузер с поддержкой cookie.
Он стоил 190 баков.
Когда-то натыкался на эту ветку, сейчас найти не могу.
Автор: Figaro2000
Дата сообщения: 18.01.2007 11:36
cyberlv2
Коммерческие компоненты и утилиты для Delphi/BCB
хттп://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=32815#1
Автор: cyberlv2
Дата сообщения: 18.01.2007 11:43

Цитата:
Коммерческие компоненты и утилиты для Delphi/BCB
хттп://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=32815#1

Огромное спасибо!
Автор: oan42
Дата сообщения: 18.01.2007 15:48
andead
Оптимизация объектного кода нужна, чтобы программа была быстрее и меньше по объему.
Виды оптимизации:
placing variables in CPU registers;
eliminating common subexpressions;
generating induction variables;
и т.п.

Отключают оптимизацию обычно в двух случаях:
отладка без помех для команды отладчика Evaluate/Modify (Ctrl+F4)
(нельзя посмотреть значение локальной переменной (в т.ч. через Self),
когда прошли по шагам дальше, чем нужна эта переменная).
при использовании MemCheck рекомендуется отключать оптимизацию,
правда не знаю зачем. Я не заметил разницы с т.зр. выдаваемой информации.
Автор: YFred
Дата сообщения: 18.01.2007 20:00
Спасибо RostY
сделал так:

Цитата:
i:=(Sender as TMenuItem).Tag;

Автор: Celeron
Дата сообщения: 19.01.2007 05:09
Здравствуйте! У меня проблема с использованием старой математической библиотеки IMSL Fortran 90 MP Library v4.01

Прикрутил её к своей программе на Delphi2006, через dll-обёртку, написанную на MS VC. Протестировал - реально работает - нашёл функцию, которая возвращает осмысленные ожидаемые данные - типа тест.

Далее подобрал данные так, чтобы вызывалась ошибка времени выполнения. И
столкнулся с проблемой, описанной здесь:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=35001
Программа вылетает с ошибкой. Кто с таким сталкивался и Решил, отзовитесь?

Когда открываю консоль в программа (директивой {$APPTYPE CONSOLE} или
командой AllocConsole() - не важно), то консоль открывается, НО программа у меня всё равно вылетает, хотя уже - молча! Т.е. эффект есть, но недостаточный.

Полагаю надо перенаправить вывод STD_ERROR_HANDLE в консоль.
Пробовал так:
handle := FileOpen('debug.out', fmOpenWrite);
b := SetStdHandle(STD_ERROR_HANDLE, handle);
И так:
handle := GetStdHandle(STD_ERROR_HANDLE);
SetStdHandle(STD_OUTPUT_HANDLE, handle);
Ноль эффекта!

Можете что-то подсказать на этот счёт? Спасибо!
Автор: greenpc
Дата сообщения: 19.01.2007 10:00
Celeron
Может это поможет.
Пункт : Запись в Log-файл
_http://www.nmarket.ru/program/delphi/lessons-1/les-27.php
Автор: Celeron
Дата сообщения: 19.01.2007 15:19

Цитата:
Может это поможет.
Пункт : Запись в Log-файл

Спасибо, но не то. Это пример того, как автоматически открывать файл лога, путём лёгкого присоединения модуля - это просто трюк для Делфи. А писать в файл - не проблема. Проблема - перехватить STD_ERROR и направить в поток (файл или консоль)...
Автор: greenpc
Дата сообщения: 21.01.2007 13:13
Celeron
тогда из хелпа

Цитата:
Delphi syntax:
var ErrOutput: Text;
Description
In Delphi, the ErrOutput variable is a write-only Text file associated with the process's standard error output.

On Windows, most processes don't have a standard error file, and writing to ErrOutput raises an error. Delphi programs have a standard error file if they are linked as console applications
Автор: akaGM
Дата сообщения: 21.01.2007 14:12
Celeron
используй еврейку
__http://www.eurekalog.com/

Catches _every_ exception (юнит, либ, длл) оч простая в использовании, надёжная, панацея в общем...
всем рекомендую, спрашивать в варезе...
Автор: batton
Дата сообщения: 22.01.2007 20:50
Господа (и Дамы, ежели такие обитают в этой ветке)
Мне нужна ваша подсказка. Вопрос имеет отношение к Delphi, но косвенное.
суть: Есть база Access и программа написанная на Дельфи. Необходимо базу портировать в MySQL а все кизображения хранящиеся в базе - выгрузить в файлы.
Так вот проблема в том что при попытке чтения OLE полей скриптом написанном на PERL в файл выдает абсолютно непонятный набор данных.
Если попытаться открыть эти поля силами Access то выдает ошибку подключения OLE сервера, короче воспринимает он все как "двоичные данные".
После гуглирования проблемы сделал вывод что для корректной записи и отображения изображений хранимых в базе данных в Дельфи применяются различные ухищрения по обработке исходного файла.
Подскажите пожалуйста алгоритм этой обработки.
P.s.: с дельфи я к сожалению незнаком абсолютно. Поэтому прошу именно алгоритм, потому что реализовывать его буду на perl. Спасибо
Автор: Celeron
Дата сообщения: 22.01.2007 23:10

Цитата:
Так вот проблема в том что при попытке чтения OLE полей скриптом написанном на PERL в файл выдает абсолютно непонятный набор данных.

Логично. Неинтерпретированный бинарный код OLE-объекта.


Цитата:
в Дельфи применяются различные ухищрения

Они применяются не в Делфи. Это алгоритмы OLE2.0 сервера. Причём специфического сервера, в данном случае - контейнер изображения.


Цитата:
Если попытаться открыть эти поля силами Access то выдает ошибку подключения OLE сервера, короче воспринимает он все как "двоичные данные".

А вот это плохо - это свидетельствует, что OLE2.0 сервер контейнера либо не установлен на вашей машине, либо, что более вероятно, не поддерживает некоторых методов, которые запрашивает Access.


Цитата:
прошу именно алгоритм

Алгоритма ты не получишь. Он зашит в OLE-сервере контенера Микрософтом.

Работать с OLE можно только через Win32API см. PlatformSDK. А вообще смотри исходник Делфи, если есть, и посмотри какими вызовами он выдёргивает картинку из поля. (У меня в своё время не получилось реализовать подобное. Но я не сильно искал...)

Цитата:
с дельфи я к сожалению незнаком абсолютно

Чужие скрипты читать умеешь? Найди в чужом коде (ну и что что он написан на делфи) вызов картинки (если он есть).
А если исходников Дельфи программы нет, то остаётся только PlatformSDK (искать в MSDN).

P.S. Вообще-то тебе надо не перлом выдирать из Аксеса картинки, а другой Win32-программой. А на перле - уже будешь их использовать.
Автор: batton
Дата сообщения: 22.01.2007 23:19
проблема в том что на форума access`овцы сказали мне - это заморочка дельфи и ничего не мешает просто зкинуть содержимое файла в ole поле как blob.
Исходника программы у меня нет. В принципе я потихоньку дергаю картиинки этой программой и сохраняю на диск, но их там 700 а скрипт сделает это все за секунды.
Если я правильно понимаю вас, то мне достаточно подключится к базе используя OLE (это тоже возможно но я ещё не пробовал) и забрать этот файл как OLE. или существуют другие методы достучаться до объекта?
Автор: Celeron
Дата сообщения: 23.01.2007 03:09

Цитата:
это заморочка дельфи и ничего не мешает просто скинуть содержимое файла в ole поле как blob.

Здесь сказан бред. Правильно говорить: "ничего не мешает просто скинуть содержимое файла в поле типа blob." Да это было бы правильно - дельфи мог бы читать блобы и выводить на форму.
Но вы говорите OLE, может у вас никаких OLE-обёрток нет в БД Аксеса?
А если есть, то рекомендую спрограммировать на Access форму, на которую поместить объект Picture, который прекрасно читает картинку из связанного с ним поля, в котором картинка в OLE-обёртке. Полагаю, что у контрола Picture также должен быть метод, чтобы сохранить картинку в файл на диске. Надо юзать высокоуровневые объекты, а не "мифические алгоритмы делфи".


Цитата:
Если я правильно понимаю вас, то мне достаточно подключится к базе используя OLE (это тоже возможно но я ещё не пробовал)

Речь здесь совсем не о том, чтобы соединяться с базой, через OLEDB-провайдера или Access automation server! Думайте...
Автор: freedom83
Дата сообщения: 23.01.2007 09:49
delphi indy 10
пишу программу для отправки писем.
1.как приаттачить файлы к письму по маске(*.txt) в указанной директории?
2. письмо с одним аттачем создается, но его время при получении стоит текущее время +3,00.
(кто виноват: программа или почтовый сервер)
3. как зашифровать и подписать файлы ключами типа *.asc

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Событие STFilter(DBGridEh) ???


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.