(Часть 2) Я начинающий, подскажите пожалуйста как...
Прежде чем задать вопрос здесь, вы обязаны использовать
- Поиск по форуму, используя ключевые слова из вашего вопроса. Как правильно использовать поиск - читайте здесь
- Список наиболее часто задаваемых вопросов (FAQ)
- Поиск по предыдущей теме
Кроме того, прежде чем размещать сообщение, ознакомьтесь с правилами.
При размещении вопросов начинающих помимо указанной темы, будет выдаваться нарушение, а тема удаляться.
Пытаюсь сделать вычисляемое поле.
Если делаю вычисления из числа то всё считает:
"void __fastcall TForm1::Table1CalcFields(TDataSet *DataSet)
{Table1Pribil->Value=2000 -Table1Сумма->Value;}"
Если делаю вычисления между полями, то выдаёт ошибки:
"void __fastcall TForm1::Table1CalcFields(TDataSet *DataSet)
{Table1Pribil->Value=Table1Сумма - Table1РасходыА;}"
Подскажите в чём ошибка?
Ошибки в студию
Не подскажите ли решение..., я в своем приложении использую библиотеку LibMySQL.dll. Как бы сделать так, чтобы программа не ругалась при старте на ее отсутствие, а в процедуре onFormCreate находила в реестре путь к папке mysql и прописывала его в окружение. В общем как-то так. Вообще, возможно ли это: если программа использует специфическую библиотеку, предусмотреть первоначальный анализ ее присутствия.
Не подскажите ли решение..., я в своем приложении использую библиотеку LibMySQL.dll. Как бы сделать так, чтобы программа не ругалась при старте на ее отсутствие, а в процедуре onFormCreate находила в реестре путь к папке mysql и прописывала его в окружение. В общем как-то так. Вообще, возможно ли это: если программа использует специфическую библиотеку, предусмотреть первоначальный анализ ее присутствия.
Цитата: nick42
Не подскажите ли решение..., я в своем приложении использую библиотеку LibMySQL.dll.
Как загружаете dll?
Положи ее в папку со своим приложением и:
hLib=LoadLibrary("LibMySQL.dll");
Если hLib==NULL значит dll-ки нет.
Цитата: George22
Как загружаете dll?
Если ругается - то вероятнее всего статически.
В _tWinMain все try catch яросно удалил - всёравно непомогло. В насройках проекта никаких опций для настройки обработки исключений я ненашел.
И еще есть любопытный и сильно доставучий ньюанс: когда приложение падает то окно "отправить отчет/не отправлять" выпадает всегда три раза подряд.
P.S. почему я не пишу весь код программы на билдере не спрашивать. на то есть весомые причины)
Цитата: Bard
P.S. почему я не пишу весь код программы на билдере не спрашивать. на то есть весомые причины)
Тебе в голову не приходит вариант - что исключения надо не отключать, а обрабатывать?
Цитата: nick42
Не подскажите ли решение..., я в своем приложении использую библиотеку LibMySQL.dll. Как бы сделать так, чтобы программа не ругалась при старте на ее отсутствие
положите dll в папку %WINDIR%\System32 - хотя это не готичьно. Тру готы ложат ее в тот же каталог, что и исполняемый файл.
Цитата: Bard
Как отключить (если вообще возможно) встроенную обработку исключений?
Tools->DebuggerOptions->LanguageExeptions->Add
Есть масив символов (строка).
Например unsigned char textkey="00112233445566778899aabbccddeeff". (Ключ для шифрования, если спросите, что это и зачем).
Для дальнейшей работы надо этот масив символов сделать масивом соответствующих байт, а то есть char bytekey={0x00,0x11,0x22,...,0xee,0xff}.
Пожалуйста, помогите это сделать наиболее простым способом...
Или, если можно вводить данные в поле Edit сразу в Hex формате, а не как текст, то подскажите, как...
Юзаю C++ Builder 2007.
Код:
app = CreateOleObject("Excel.Application");
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Open")<<"c:/1/1.xls");
book = books.OlePropertyGet("item",1);
sheet= book.OlePropertyGet("WorkSheets",1);
app.OlePropertySet("Visible", 1);
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Open")<<"c:/1/1.xls");
book = books.OlePropertyGet("item",1);
sheet= book.OlePropertyGet("WorkSheets",1);
app.OlePropertySet("Visible", 1);
Код:
void __fastcall setValue(int row,int col,AnsiString as)
{
Variant r = sheet.OlePropertyGet("Range", toText(row,col) );
r.OlePropertySet("Value", as);
}
{
Variant r = sheet.OlePropertyGet("Range", toText(row,col) );
r.OlePropertySet("Value", as);
}
Код:
AnsiString str_zn = "bla";
setValue(5,5,str_zn);
setValue(5,5,str_zn);
На последнем куске кода вылетает, с ошибкой:
Цитата:
Project Project1.exe raised exception class EOleSysError with message 'Неверный тип переменной'
при этом открывает мне sysvari.h, подсвечивая строку:
Код:
OlePropertySet(name, static_cast<TAutoArgsBase&>(args));
Как мне тогда вызывать функцию setValue?
Или может вообще не использовать AnsiString?
Заранее всем спасибо за ответ!
На данный момент есть вот что:
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<SCRIPT language="JavaScript">
//alert(1);
var req;
loadXMLDoc("http://ya.ru");
function loadXMLDoc(url) {
req = false;
// branch for native XMLHttpRequest object
if(window.XMLHttpRequest && !(window.ActiveXObject)) {
try {
req = new XMLHttpRequest();
} catch(e) {
req = false;
}
// branch for IE/Windows ActiveX version
} else if(window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
req = false;
}
}
}
if(req) {
//req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send("");
//alert(req.status);
alert(req.responsetext);
}
}
</script>
</body>
</html>
<html>
<head>
<title>Untitled</title>
</head>
<body>
<SCRIPT language="JavaScript">
//alert(1);
var req;
loadXMLDoc("http://ya.ru");
function loadXMLDoc(url) {
req = false;
// branch for native XMLHttpRequest object
if(window.XMLHttpRequest && !(window.ActiveXObject)) {
try {
req = new XMLHttpRequest();
} catch(e) {
req = false;
}
// branch for IE/Windows ActiveX version
} else if(window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
req = false;
}
}
}
if(req) {
//req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send("");
//alert(req.status);
alert(req.responsetext);
}
}
</script>
</body>
</html>
Я сохранил это как файл с расширением .html
Почему-то выводится совсем не код запрашиваемой страницы... строка:
alert(req.responsetext);
в чем здесь дело?
Evg64, ну а че выводится тогда? И вообще req.responsetext неверно, т.к. нет такого свойства, есть свойство responseText. И вообще разделом ошиблись.
Цитата: Evg64
Хочу написать на скрипт, который будет посылать http-запрос через объект XMLHttpRequest и будет выводить в браузер ответ (HTML-код запрашиваемой страницы).
Что не позволяет JQuery использовать?
Код:
// f.h
class TChildFormProtocol : public TForm
{
__published:
//...
private:
static HANDLE s_hHeap; // описатель кучи //
static UINT s_uNumAllocsInHeap; // счетчик созданых в куче объектов //
public:
void* operator new (size_t size); //
void operator delete (void* p); //
};
//f.cpp
HANDLE TChildFormProtocol::s_hHeap = NULL;
UINT TChildFormProtocol::s_uNumAllocsInHeap = 0;
void* TChildFormProtocol::operator new (size_t size)
{
if (s_hHeap == NULL) {
// куча не существует, создаем ее
s_hHeap = HeapCreate(0, 0, 0);
if (s_hHeap == NULL)
return(NULL);
}
// куча для объектов CSomeClass существует
void* p = HeapAlloc(s_hHeap, 0, size);
if (p != NULL) {
// память выделена успешно;
// увеличиваем счетчик объектов CSomeClass в куче
s_uNumAllocsInHeap++;
}
// возвращаем адрес созданного объекта CSomeClass
return(p);
}
void TChildFormProtocol::operator delete (void* p)
{
if (HeapFree(s_hHeap, 0, p)) {
// объект удален успешно
s_uNumAllocsInHeap--;
}
if (s_uNumAllocsInHeap == 0) {
// если в куче больше нет объектов, уничтожаем ее
if (HeapDestroy(s_hHeap)) {
// описатель кучи приравниваем NULL, чтобы оператор new
// мог создать новую кучу при создании нового объекта
s_hHeap = NULL;
}
}
}
class TChildFormProtocol : public TForm
{
__published:
//...
private:
static HANDLE s_hHeap; // описатель кучи //
static UINT s_uNumAllocsInHeap; // счетчик созданых в куче объектов //
public:
void* operator new (size_t size); //
void operator delete (void* p); //
};
//f.cpp
HANDLE TChildFormProtocol::s_hHeap = NULL;
UINT TChildFormProtocol::s_uNumAllocsInHeap = 0;
void* TChildFormProtocol::operator new (size_t size)
{
if (s_hHeap == NULL) {
// куча не существует, создаем ее
s_hHeap = HeapCreate(0, 0, 0);
if (s_hHeap == NULL)
return(NULL);
}
// куча для объектов CSomeClass существует
void* p = HeapAlloc(s_hHeap, 0, size);
if (p != NULL) {
// память выделена успешно;
// увеличиваем счетчик объектов CSomeClass в куче
s_uNumAllocsInHeap++;
}
// возвращаем адрес созданного объекта CSomeClass
return(p);
}
void TChildFormProtocol::operator delete (void* p)
{
if (HeapFree(s_hHeap, 0, p)) {
// объект удален успешно
s_uNumAllocsInHeap--;
}
if (s_uNumAllocsInHeap == 0) {
// если в куче больше нет объектов, уничтожаем ее
if (HeapDestroy(s_hHeap)) {
// описатель кучи приравниваем NULL, чтобы оператор new
// мог создать новую кучу при создании нового объекта
s_hHeap = NULL;
}
}
}
А можно ли в c++ Builder 6 увидеть результат работы препроцессора, а также что-нибудь наподобие ассемблерного листинга?
Цитата: FeelUs
А можно ли в c++ Builder 6 увидеть результат работы препроцессора, а также что-нибудь наподобие ассемблерного листинга?
Вроде можно. Покапайся в project/options во вкладке compiler, вроде там галочка, чтобы генерировался листинг ассемблерный.
Но мне главное результат препроцессора.
В ХЕ это делается в compiler/advanced, в 6ке тоже далеко не в тасме делалось. Помомему lst файлы он умел генерировать.
Про работу препроцессора вроде нельзя узнать, если мне память не изменяет.
Code optimization(None,Speed,Selected(B: Optimizations))
Warnings(None,All,Selected(B: Warnings))
Debugging[Debug information,Line number information,Disable inline expansions]
Pre-compiled headers(None,Use pre-compiled headers,Cache pre-compiled headers,File name:...,Stoe after:...)
Compiling(Merge duplicate strings,Stack frames,Treat enum types as ints,Show general messages,Extended error information (Q))
и пара кнопок B: Full debug, B: Release
А про результат препроцессора хотелось бы по точнее
Подскажите примеры как работать с ReadDirectoryChanges
Цитата: hobbitivan
Подскажите примеры как работать с ReadDirectoryChanges
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE hdir = CreateFile("D:\\Temp",
FILE_LIST_DIRECTORY,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL);
FILE_NOTIFY_INFORMATION Buffer[1024];
DWORD BytesReturned;
while ( true)
{
int ret = ReadDirectoryChangesW(
hdir,
&Buffer,
sizeof(Buffer),
True,
FILE_NOTIFY_CHANGE_SECURITY|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
&BytesReturned,
NULL,
NULL
);
switch(Buffer[0].Action)
{
case FILE_ACTION_ADDED:
Memo1->Lines->Add("Файл добавлен");
break;
case FILE_ACTION_REMOVED:
Memo1->Lines->Add("Файл удален");
break;
case FILE_ACTION_MODIFIED:
Memo1->Lines->Add("файл изменен");
break;
}
}
CloseHandle( hdir );
}
{
HANDLE hdir = CreateFile("D:\\Temp",
FILE_LIST_DIRECTORY,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL);
FILE_NOTIFY_INFORMATION Buffer[1024];
DWORD BytesReturned;
while ( true)
{
int ret = ReadDirectoryChangesW(
hdir,
&Buffer,
sizeof(Buffer),
True,
FILE_NOTIFY_CHANGE_SECURITY|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
&BytesReturned,
NULL,
NULL
);
switch(Buffer[0].Action)
{
case FILE_ACTION_ADDED:
Memo1->Lines->Add("Файл добавлен");
break;
case FILE_ACTION_REMOVED:
Memo1->Lines->Add("Файл удален");
break;
case FILE_ACTION_MODIFIED:
Memo1->Lines->Add("файл изменен");
break;
}
}
CloseHandle( hdir );
}
Неудивительно–по умолчанию же функция в синхронном режиме работает,поэтому,пока ничего не произойдёт,она не отвиснет
Подскажите, пожалуйста, как исправить
Очевидно же,создать 2й поток либо включить асинхронный режим
Код:
CreateFile("D:\\Temp",
FILE_LIST_DIRECTORY,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_OVERLAPPED,
NULL);
FILE_LIST_DIRECTORY,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_OVERLAPPED,
NULL);
Код:
OVERLAPPED ovl = {};
Код:
int ret = ReadDirectoryChangesW(
hdir,
&Buffer,
sizeof(Buffer),
True,
FILE_NOTIFY_CHANGE_SECURITY|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
&BytesReturned,
&ovl,
NULL
);
hdir,
&Buffer,
sizeof(Buffer),
True,
FILE_NOTIFY_CHANGE_SECURITY|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
&BytesReturned,
&ovl,
NULL
);
Вроде должен быть теперь асинхронным, но ничего не изменилось.
Код:
char *str=Memo1->Text.Trim().c_str();
Или может в поток как-нибудь это текст превратить.
Цель - пробежаться по каждой букве текста (и желательно сделать это максимально просто).
Код:
char * str=new char[Memo1->Text.Trim().Length()+1];
memcpy(str,Memo1->Text.Trim().c_str(),Memo1->Text.Trim().Length()+1);//Или в цикле посимвольно копируем
memcpy(str,Memo1->Text.Trim().c_str(),Memo1->Text.Trim().Length()+1);//Или в цикле посимвольно копируем
Ну а чтобы пробежатся по каждой букве можно так без копирования:
Код:
for(int x=0;x<Memo1->Text.Trim().Length();x+=1)
if(Memo1->Text.Trim().c_str()[x]=='A')
ShowMessage(IntToStr(x)+"-й символ - А");
if(Memo1->Text.Trim().c_str()[x]=='A')
ShowMessage(IntToStr(x)+"-й символ - А");
Спасибо.
как привязать к графику scrollbar? Чтобы график не сжимался до одного окна, а можно было прокрутить его. А то значений много, и график получается слишком маленьким.
Есть таймер TForm1::Timer_primerTimer(TObject *Sender), который получает некое значение каждую секунду и обрабатывает его, в зависимости от этого значения (отрицательное, ноль, положительное). После обработки рисует линию на Image1 с помощью:
Код:
Image1->Canvas->MoveTo(znachenie1, znachenie2); //znachenie1, znachenie2 - некие полученные коэффициенты
Image1->Canvas->LineTo(100,100);
Image1->Canvas->LineTo(100,100);
Цвет для рисования линии задан заранее:
Код:
Image1 -> Canvas -> Pen -> Color = RGB(250,0,0);
Так как таймер каждую секунду получает новое значение и обрабатывает его, то и рисует новые линии. При этом естественно остаются старые.
Что нужно:
Сделать так, чтобы перед тем как нарисовать новую линию, старая была затерта цветом фона как на картинке Image1. RGB цвЕта известен. Идеально если будет одновременно закрашиваться старая и появляться новая.
В чем проблема:
Если в конце ф-ции таймера писать изменение цвета на фоновый, то все дальнейшие линии становятся этого цвета.
Вопрос:
Какой создать цикл или ещё что-то чтобы закрашивать предыдущие линии?
P.S. Нашел ф-цию Refresh, однако она видимо не для этого..
Спасибо всем!
Спасибо kazachok с cyberforum.ru!
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Randomize;
// отсюда затираем старую
Image1->Canvas->Pen->Color = clWhite; // это известный цвет фона для затирки
Image1->Canvas->LineTo(x,y);
Image1->Canvas->MoveTo(100,100);
// отсюда рисуем новую линию
x = RandomRange(0,200);
y = RandomRange(0,200);
Image1->Canvas->Pen->Color = clBlack;
Image1->Canvas->LineTo(x,y);
Image1->Canvas->MoveTo(100,100);
}
char *str2=Edit1->Text.Trim().c_str();
============================
Вроде сам решил проблему. Но все равно интересно почему с ошибкой текст вытаскивало.
Либо копируй его либо используй Edit1->Text.c_str()
вот скрин программы : [ATTACH=CONFIG]5233[/ATTACH]
Задача состоит в том что:
1) напротив каждого LabelEditа появляется кнопка(при наведении на него) чтобы изменить ссылу, есть форма для изменения этой ссылки. Нужно чтобы при нажатии на кнопку напротив LabelEdit в форму редактирования ссылки передавался номер LabelEdit (имя) и при сохранении данные выводились в него(в тот напротив которого была нажата кнопка редактирования).
Все это необходимо чтобы не создавать кучу форм в программе для каждого LabelEdit, а просто чтоб была одна.
ну как то так.
Не надо передавать номер, надо в форму передать содержимое едита. А после возврата из формы, установить его.
Подскажите как посмотреть что внутри динамического массива? Статические нормально можно смотреть через Local Variables, но с динамическими так не получается...
Цитата: Ivan___
Подскажите как посмотреть что внутри динамического массива? Статические нормально можно смотреть через Local Variables, но с динамическими так не получается...
Add watch?