#ifndef Unit2H
#define Unit2H
int qwe = 10;
#endif
(Часть 1) (*Закрыта*)Я начинающий, подскажите пожалуйста, как...
Если вы только начинаете осваивать среду разработки ВСВ - предлагаю возникающие вопросы размещать в данной теме. Не создавайте пожалуста отдельные темы - типа "Как мне запустить свое приложение на другом компьютере", "Как перевести String в char*" и тому подобное. Такие темы будут закрываться с отсылку в эту. Не обижайтесь.
Кроме того, не брезгуйте плиз, пользоваться поиском хотя бы, по нескольким критериям. Иногда бывает так, вопрос который возник у вас не столь оригинален - вполне возможно, кто то уже спрашивал его до вас :) Поверьте, отвечать на одни и теже вопросы тоже не всегда интересно.
Если вы задаете свой вопрос на форуме - что бы получить наиболее эффективный ответ - следуйте пожалуйста несложным правилам. Они просты:
0. Опишите чего вы хотели добиться.
1. Опишите ошибку которая у вас возникла, по возможности с текстом самой ошибки.
2. Если вы считаете это необходимым - приведите фрагмент(пожалуста не помещайте в свой вопрос весь листинг) кода, на который жалуется компилятор, коротко описав переменные которые используются, и как они инициализируются. Исходники высылайте или выкладывайте только в том случае, если вас об этом просят.
3. Если проблема связана с функцией какой либо библиотеки - не стесняйтесь залезть в хелп и найти там ее описание. То чтовы не рубите в английском, зато читаете Рабле в оригинале - отнюдь не оправдание. Людей для которых английский - родной, здесь немного. Пользуйтесь словарем, это дает результаты :)
4. Не забывайте - может быть ВСВ и имеет раширения по сравнению со стандартом - но тем не менее это С++. Не забывайте проверить, что в ваш проект подключены все необходимые заголовочные файлы, а так же файлы библиотек.
5. Если вы задали вопрос один раз - не нужно его повторять или дублировать, или размещать посты типа "Ну что никто не знает" и т.д. Вы рискуете узнать много разных путей, но так и не получить нужный вам ответ.
6. Форум - дело сугубо добровольное. Здесь ни кто НЕ ОБЯЗАН искать ответы на ваши вопросы. Если вам отвечают - то это только исключительно из любви к вам. :)
7. Исходя из выше сказанного, если вам не отвечают - ну возможно вас не любят :)
8. Для тех, кому нужно написать курсовую, программу, решить контрольную или тому подобное - существует раздел форума Студентам
Размещайте, плиз, свои посты там. Сообщения размещенные в данной теме - не будут перемещаться - они будут удаляться.
9. Если вы хотите пообщаться, обсудить тему, не связанную с ВСВ - милости просим: В "Отдохнем". Флуд в данном разделе не приветствуется.
Ну вроде все. Если что забыл - или не так - поправьте.
Удачи.
Как на VB я знаю, а в bcppb???
В общем у меня такая ерунда: в проекте две формы, я объявил в Unit1.h переменную типа AnsiString, в Unit2.cpp пишу include"Unit1.h".
При этом переменная доступна в обоих модулях, но изменяется она локально,т.е. если её изменить в одном модуле, то во втором её значение не изменится!!!
HELP-Если что-то ляпнул, то объясните, пожалуйста, как это делается!!!
Пишу настройки к своей проге.[/QUOTE]
Допустим модуль Unit2 у тя для данных, тогда напиши в unit2.h
Код:
а в Unit1.h
Код:
extern int qwe;
Если будешь использовать третий модуль, то в нем тож напишт тоже, что и в Unit1.h
А так, как сделал ты, это у тя просто 2 разные переменные в разных модулях, да и линкер варнинги писал (ели ты их не выключил)
Как на VB я знаю, а в bcppb???[/QUOTE]
Получи адрес структуры и ее длинну (размер), и просто пиши это в файл как двоичные данные.
Вот только все это зависит от того, как данные выровнены в памяти. Что нам скажут по этому поводу Гуру?
Я так понял надо работать с указателем на структуру???
Чем в файл записывать???
Я так понял надо работать с указателем на структуру???
Чем в файл записывать???[/QUOTE]
Код:
//LoadModules.h
#ifndef LoadModulesH
#define LoadModulesH
#include <iostream.h>
#include <fstream.h>
#include "Structures.h"
#include "InvoceIn.h"
#include "ProductHigh.h"
#include "ClientHigh.h"
#include "ScladProd.h"
//---------------------------------------------------------------------------
class TLoadDocument:public fstream
{
public:
TLoadDocument();
~TLoadDocument(){};
void OpenFile(const AnsiString& f,int mode);
int operator >>(TProductHigh&);
int operator >>(TInvoiceIn&);
int operator >>(TClientHigh&);
int operator >>(TScladProd&);
int operator <<(TProductHigh&);
int operator <<(TInvoiceIn&);
int operator <<(TClientHigh&);
int operator <<(TScladProd&);
protected:
friend class TPorductHigh;
friend class TDocumentHigh;
friend class TClientHigh;
friend class TScladProd;
int SetCurrentDirL();
//TStringList
AnsiString FileName;
AnsiString DirName;
TProductLow Product;
TDocumentLow Document;
TScladLow Sclad;
TSprProductLow SprProduct;
TSprClientLow SprClient;
};
#endif
#ifndef LoadModulesH
#define LoadModulesH
#include <iostream.h>
#include <fstream.h>
#include "Structures.h"
#include "InvoceIn.h"
#include "ProductHigh.h"
#include "ClientHigh.h"
#include "ScladProd.h"
//---------------------------------------------------------------------------
class TLoadDocument:public fstream
{
public:
TLoadDocument();
~TLoadDocument(){};
void OpenFile(const AnsiString& f,int mode);
int operator >>(TProductHigh&);
int operator >>(TInvoiceIn&);
int operator >>(TClientHigh&);
int operator >>(TScladProd&);
int operator <<(TProductHigh&);
int operator <<(TInvoiceIn&);
int operator <<(TClientHigh&);
int operator <<(TScladProd&);
protected:
friend class TPorductHigh;
friend class TDocumentHigh;
friend class TClientHigh;
friend class TScladProd;
int SetCurrentDirL();
//TStringList
AnsiString FileName;
AnsiString DirName;
TProductLow Product;
TDocumentLow Document;
TScladLow Sclad;
TSprProductLow SprProduct;
TSprClientLow SprClient;
};
#endif
Код:
//LoadModules.cpp
#include "LoadModules.h"
#include <registry.hpp>
//---------------------------------------------------------------------------
TLoadDocument::TLoadDocument(){
}
void TLoadDocument::OpenFile(const AnsiString& f,int mode){
this->open(f.c_str(),mode);
}
int TLoadDocument::operator <<(TProductHigh& prod)
{
prod>>Product;
this->write(Product.Code,sizeof(Product.Code));
this->write(Product.Name,sizeof(Product.Name));
this->write(Product.Pack,sizeof(Product.Pack));
this->write(Product.PriceIn,sizeof(Product.PriceIn));
this->write(Product.PriceOut,sizeof(Product.PriceOut));
this->write(Product.Packed,sizeof(Product.Packed));
this->write(Product.ProductQ,sizeof(Product.ProductQ));
return sizeof(Product);
}
int TLoadDocument::operator >>(TProductHigh& prod)
{
this->read(Product.Code,sizeof(Product.Code));
this->read(Product.Name,sizeof(Product.Name));
this->read(Product.Pack,sizeof(Product.Pack));
this->read(Product.PriceIn,sizeof(Product.PriceIn));
this->read(Product.PriceOut,sizeof(Product.PriceOut));
this->read(Product.Packed,sizeof(Product.Packed));
this->read(Product.ProductQ,sizeof(Product.ProductQ));
prod=Product;
return sizeof(Product);
}
int TLoadDocument::operator >>(TInvoiceIn& doc){
this->read(Document.Code,sizeof(Document.Code));
this->read(Document.Name,sizeof(Document.Name));
this->read(Document.Date,sizeof(Document.Date));
this->read(Document.Time,sizeof(Document.Time));
this->read(Document.Amount,sizeof(Document.Amount));
this->read(Document.Client,sizeof(Document.Client));
this->read(Document.Meneger,sizeof(Document.Meneger));
this->read(Document.ProducCount,sizeof(Document.ProducCount));
this->read(Document.Delete,sizeof(Document.Delete));
this->read(Document.prodlist,sizeof(Document.prodlist));
// doc(Document);
doc = Document;
return (sizeof(Document));
}
int TLoadDocument::operator <<(TInvoiceIn& doc){
doc >> Document;
this->write(Document.Code,sizeof(Document.Code));
this->write(Document.Name,sizeof(Document.Name));
this->write(Document.Date,sizeof(Document.Date));
this->write(Document.Time,sizeof(Document.Time));
this->write(Document.Amount,sizeof(Document.Amount));
this->write(Document.Client,sizeof(Document.Client));
this->write(Document.Meneger,sizeof(Document.Meneger));
this->write(Document.ProducCount,sizeof(Document.ProducCount));
this->write(Document.Delete,sizeof(Document.Delete));
this->write(Document.prodlist,sizeof(Document.prodlist));
int size = 0;
return (sizeof(Document));
}
int TLoadDocument::operator <<(TClientHigh& client){
client >>SprClient;
this->write(SprClient.Code,sizeof(SprClient.Code));
this->write(SprClient.Name,sizeof(SprClient.Name));
this->write(SprClient.Address,sizeof(SprClient.Address));
this->write(SprClient.Phone,sizeof(SprClient.Phone));
this->write(SprClient.Fax,sizeof(SprClient.Fax));
this->write(SprClient.EMail,sizeof(SprClient.EMail));
this->write(SprClient.INN,sizeof(SprClient.INN));
this->write(SprClient.MFO,sizeof(SprClient.MFO));
this->write(SprClient.Schet,sizeof(SprClient.Schet));
this->write(SprClient.Delete,sizeof(SprClient.Delete));
return sizeof(SprClient);
}
int TLoadDocument::operator >>(TClientHigh& client){
this->read(SprClient.Code,sizeof(SprClient.Code));
this->read(SprClient.Name,sizeof(SprClient.Name));
this->read(SprClient.Address,sizeof(SprClient.Address));
this->read(SprClient.Phone,sizeof(SprClient.Phone));
this->read(SprClient.Fax,sizeof(SprClient.Fax));
this->read(SprClient.EMail,sizeof(SprClient.EMail));
this->read(SprClient.INN,sizeof(SprClient.INN));
this->read(SprClient.MFO,sizeof(SprClient.MFO));
this->read(SprClient.Schet,sizeof(SprClient.Schet));
this->read(SprClient.Delete,sizeof(SprClient.Delete));
client.Copy(SprClient);
return sizeof(SprClient);
}
int TLoadDocument::operator >>(TScladProd& product){
this->read(Sclad.Code,sizeof(Sclad.Code));
this->read(Sclad.InCode,sizeof(Sclad.InCode));
this->read(Sclad.DocCode,sizeof(Sclad.DocCode));
this->read(Sclad.Name,sizeof(Sclad.Name));
this->read(Sclad.Pack,sizeof(Sclad.Pack));
this->read(Sclad.PriceIn,sizeof(Sclad.PriceIn));
this->read(Sclad.PriceOut,sizeof(Sclad.PriceOut));
this->read(Sclad.Packed,sizeof(Sclad.Packed));
this->read(Sclad.ProductQ,sizeof(Sclad.ProductQ));
this->read(Sclad.Count,sizeof(Sclad.Count));
this->read(Sclad.Data1,sizeof(Sclad.Data1));
this->read(Sclad.Time,sizeof(Sclad.Time));
product=Sclad;
return sizeof(Sclad);
}
int TLoadDocument::operator <<(TScladProd& product){
product >> Sclad;
this->write(Sclad.Code,sizeof(Sclad.Code));
this->write(Sclad.InCode,sizeof(Sclad.InCode));
this->write(Sclad.DocCode,sizeof(Sclad.DocCode));
this->write(Sclad.Name,sizeof(Sclad.Name));
this->write(Sclad.Pack,sizeof(Sclad.Pack));
this->write(Sclad.PriceIn,sizeof(Sclad.PriceIn));
this->write(Sclad.PriceOut,sizeof(Sclad.PriceOut));
this->write(Sclad.Packed,sizeof(Sclad.Packed));
this->write(Sclad.ProductQ,sizeof(Sclad.ProductQ));
this->write(Sclad.Count,sizeof(Sclad.Count));
this->write(Sclad.Data1,sizeof(Sclad.Data1));
this->write(Sclad.Time,sizeof(Sclad.Time));
return sizeof(Sclad);
}
#pragma package(smart_init)
#include "LoadModules.h"
#include <registry.hpp>
//---------------------------------------------------------------------------
TLoadDocument::TLoadDocument(){
}
void TLoadDocument::OpenFile(const AnsiString& f,int mode){
this->open(f.c_str(),mode);
}
int TLoadDocument::operator <<(TProductHigh& prod)
{
prod>>Product;
this->write(Product.Code,sizeof(Product.Code));
this->write(Product.Name,sizeof(Product.Name));
this->write(Product.Pack,sizeof(Product.Pack));
this->write(Product.PriceIn,sizeof(Product.PriceIn));
this->write(Product.PriceOut,sizeof(Product.PriceOut));
this->write(Product.Packed,sizeof(Product.Packed));
this->write(Product.ProductQ,sizeof(Product.ProductQ));
return sizeof(Product);
}
int TLoadDocument::operator >>(TProductHigh& prod)
{
this->read(Product.Code,sizeof(Product.Code));
this->read(Product.Name,sizeof(Product.Name));
this->read(Product.Pack,sizeof(Product.Pack));
this->read(Product.PriceIn,sizeof(Product.PriceIn));
this->read(Product.PriceOut,sizeof(Product.PriceOut));
this->read(Product.Packed,sizeof(Product.Packed));
this->read(Product.ProductQ,sizeof(Product.ProductQ));
prod=Product;
return sizeof(Product);
}
int TLoadDocument::operator >>(TInvoiceIn& doc){
this->read(Document.Code,sizeof(Document.Code));
this->read(Document.Name,sizeof(Document.Name));
this->read(Document.Date,sizeof(Document.Date));
this->read(Document.Time,sizeof(Document.Time));
this->read(Document.Amount,sizeof(Document.Amount));
this->read(Document.Client,sizeof(Document.Client));
this->read(Document.Meneger,sizeof(Document.Meneger));
this->read(Document.ProducCount,sizeof(Document.ProducCount));
this->read(Document.Delete,sizeof(Document.Delete));
this->read(Document.prodlist,sizeof(Document.prodlist));
// doc(Document);
doc = Document;
return (sizeof(Document));
}
int TLoadDocument::operator <<(TInvoiceIn& doc){
doc >> Document;
this->write(Document.Code,sizeof(Document.Code));
this->write(Document.Name,sizeof(Document.Name));
this->write(Document.Date,sizeof(Document.Date));
this->write(Document.Time,sizeof(Document.Time));
this->write(Document.Amount,sizeof(Document.Amount));
this->write(Document.Client,sizeof(Document.Client));
this->write(Document.Meneger,sizeof(Document.Meneger));
this->write(Document.ProducCount,sizeof(Document.ProducCount));
this->write(Document.Delete,sizeof(Document.Delete));
this->write(Document.prodlist,sizeof(Document.prodlist));
int size = 0;
return (sizeof(Document));
}
int TLoadDocument::operator <<(TClientHigh& client){
client >>SprClient;
this->write(SprClient.Code,sizeof(SprClient.Code));
this->write(SprClient.Name,sizeof(SprClient.Name));
this->write(SprClient.Address,sizeof(SprClient.Address));
this->write(SprClient.Phone,sizeof(SprClient.Phone));
this->write(SprClient.Fax,sizeof(SprClient.Fax));
this->write(SprClient.EMail,sizeof(SprClient.EMail));
this->write(SprClient.INN,sizeof(SprClient.INN));
this->write(SprClient.MFO,sizeof(SprClient.MFO));
this->write(SprClient.Schet,sizeof(SprClient.Schet));
this->write(SprClient.Delete,sizeof(SprClient.Delete));
return sizeof(SprClient);
}
int TLoadDocument::operator >>(TClientHigh& client){
this->read(SprClient.Code,sizeof(SprClient.Code));
this->read(SprClient.Name,sizeof(SprClient.Name));
this->read(SprClient.Address,sizeof(SprClient.Address));
this->read(SprClient.Phone,sizeof(SprClient.Phone));
this->read(SprClient.Fax,sizeof(SprClient.Fax));
this->read(SprClient.EMail,sizeof(SprClient.EMail));
this->read(SprClient.INN,sizeof(SprClient.INN));
this->read(SprClient.MFO,sizeof(SprClient.MFO));
this->read(SprClient.Schet,sizeof(SprClient.Schet));
this->read(SprClient.Delete,sizeof(SprClient.Delete));
client.Copy(SprClient);
return sizeof(SprClient);
}
int TLoadDocument::operator >>(TScladProd& product){
this->read(Sclad.Code,sizeof(Sclad.Code));
this->read(Sclad.InCode,sizeof(Sclad.InCode));
this->read(Sclad.DocCode,sizeof(Sclad.DocCode));
this->read(Sclad.Name,sizeof(Sclad.Name));
this->read(Sclad.Pack,sizeof(Sclad.Pack));
this->read(Sclad.PriceIn,sizeof(Sclad.PriceIn));
this->read(Sclad.PriceOut,sizeof(Sclad.PriceOut));
this->read(Sclad.Packed,sizeof(Sclad.Packed));
this->read(Sclad.ProductQ,sizeof(Sclad.ProductQ));
this->read(Sclad.Count,sizeof(Sclad.Count));
this->read(Sclad.Data1,sizeof(Sclad.Data1));
this->read(Sclad.Time,sizeof(Sclad.Time));
product=Sclad;
return sizeof(Sclad);
}
int TLoadDocument::operator <<(TScladProd& product){
product >> Sclad;
this->write(Sclad.Code,sizeof(Sclad.Code));
this->write(Sclad.InCode,sizeof(Sclad.InCode));
this->write(Sclad.DocCode,sizeof(Sclad.DocCode));
this->write(Sclad.Name,sizeof(Sclad.Name));
this->write(Sclad.Pack,sizeof(Sclad.Pack));
this->write(Sclad.PriceIn,sizeof(Sclad.PriceIn));
this->write(Sclad.PriceOut,sizeof(Sclad.PriceOut));
this->write(Sclad.Packed,sizeof(Sclad.Packed));
this->write(Sclad.ProductQ,sizeof(Sclad.ProductQ));
this->write(Sclad.Count,sizeof(Sclad.Count));
this->write(Sclad.Data1,sizeof(Sclad.Data1));
this->write(Sclad.Time,sizeof(Sclad.Time));
return sizeof(Sclad);
}
#pragma package(smart_init)
коротко по коду - класс предназначен для записи классов данных в файл. Каждый класс имеет перегруженный оператор записи в структуру, а затем структура записывается-считывается в файл.
Можно в принципе обойтись без класса - я думаю общий принцип понятен. Если объем записываемых данных велик - тогда такой способ не очень оптимален - для его улучшения необходимо вводить заголовок файла, позиционирование и т.п. - здесь этого нет, так как мне было не нужно. Пример использования класса:
Код:
void TListProduct::SaveToFile(const AnsiString& f){
TLoadDocument saveproduct;
saveproduct.OpenFile(f,ios::trunc|ios::out|ios::binary);
for(ProductName::iterator i = productname.begin();i!= productname.end();i++){
saveproduct<< *i;
}
saveproduct.close();
}
TLoadDocument saveproduct;
saveproduct.OpenFile(f,ios::trunc|ios::out|ios::binary);
for(ProductName::iterator i = productname.begin();i!= productname.end();i++){
saveproduct<< *i;
}
saveproduct.close();
}
При использовании учитывайте что код не полон - класс упрощен, что бы не пояснять огромное количество деталей. Это касается конструктора и т.п. Но даже в таком виде работает.
Или придётся заменить AnsiString char'ом[n]???
struct struktura
{
AnsiString num;
AnsiString num2;
AnsiString num3;
};
struktura st;
[COLOR="Blue"]//Типа запись[/COLOR]
st.num=Edit1->Text;
st.num2=Edit2->Text;
st.num3=Edit3->Text;
FILE *f=fopen("c:\\1.dat","w");
if(f){
fwrite(&st,sizeof(&st),1,f);
}
[COLOR="Blue"]//Типа чтение[/COLOR]
FILE *f=fopen("c:\\1.dat","r");
if(f){
fread(&st,???,1,f);
Edit1->Text=st.num;
Edit2->Text=st.num2;
Edit3->Text=st.num3;
}
Или придётся заменить AnsiString char'ом[n]???
struct struktura
{
AnsiString num;
AnsiString num2;
AnsiString num3;
};
struktura st;
[COLOR="Blue"]//Типа запись[/COLOR]
st.num=Edit1->Text;
st.num2=Edit2->Text;
st.num3=Edit3->Text;
FILE *f=fopen("c:\\1.dat","w");
if(f){
fwrite(&st,sizeof(&st),1,f);
}
[COLOR="Blue"]//Типа чтение[/COLOR]
FILE *f=fopen("c:\\1.dat","r");
if(f){
fread(&st,???,1,f);
Edit1->Text=st.num;
Edit2->Text=st.num2;
Edit3->Text=st.num3;
}[/QUOTE]
Заменить однозначно надо :) Работа с AnsiString создаст тебе достаточно много проблем.
По поводу чтения - варианта 2 - первый и найболее правильный
проработать структуру заголовка файла. Т.е. она в простейшем случае должна содержать размер данных (структуры целиком - тогда можно будет организовывать навигацию) например, контрольную сумму и тому подобную информацию. Размер этой структуры должен быть фиксированным для данного типа файла.
Как читать - я приводил выше. Считывать надо в поля структуры, размер данных которые надо считать получаешь через sizeof. Можно читать (и писать соответственно) полностью структуру как таковую приводя ее к типу char[] - это быстрее, все зависит от тебя.
Второй способ - читать так, как в приведенном мною коде - т.е. обычное последовательное чтение в память. Это худший вариант и годится только для простейших случаев - у меня данная операция выполнялась не часто и с небольшим набором данных - потому не заморачивался.
Ещё вопрос:
Отправляю СМС-ки средствами IdMessage и IdSMTP-пишу русскими, а приходят шиш знает какими!!!
В чём ошибка???
Задачка такая: есть таблица TStringGrid со столбцами "Знач 1".."Знач N", "Результат". В столбцы "Знач X" пользователь вносит какие-то значения, столбец "Результат" - есть результат вычисления формулы использующей значения из предыдущих столбцов. Собственно проблема, посчитать нужно сразу как только будут заполнены все столбцы "Знач X" в строке (вариант "заполнить строку и нажать кнопку "посчитать" не подходит), т.е. как только будет заполнен последний из столбцов "Знач X" в текущей строке, в столбце "Результат" сразу должен появиться результат вычисления.
Есть ли какие-нибудь события у TStringGrid, типа "выделена ячейка [ARow, ACol]" или наоборот с какой-то ячейки снято выделение? Если подобных событий нет, то подскажите, пожалуйста, каким образом можно решить данную задачу.
То же самое делать в событии OnKeyPress и проверять нажата ли была кл. Enter.
А как скрыть прогу от диспетчера задач???
Используй поиск - тема подробно обсуждалась на форуме. Да и задача не относится к задачам для начинающих. :) если речь идет о системах на базе NT.
Ладно, а тогда как измерить загрузку проца???
:)
NtQuerySystemInformation
Код выглядит приблизительно так (пишу по памяти - могут быть ошибки, проверяй сам)
Код:
typedef NTStatus (__import NTQSI*)(SYSTEM_INFORMATION_CLASS,void *,ULONG, PULONG);
NTQSI NTQuery;
HINSTANSE Dll = LoadLibrary("ntdll.dll");
if(!Dll) return;
NTQuery = (NTQSI)GetProcAddress(Dll,"NtQuerySystemInformation");
if(!NTQuery) return;
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION Sp;
ZeroMemory(&Sp,sizeof(Sp));
ULONG sizest = sizeof(Sp);
NtQuery(SystemProcessorPerformanceInformation,&Sp,sizest,&sizest);
Label1->Caption = (Int64ToStr)Sp.IdleTime;
...
NTQSI NTQuery;
HINSTANSE Dll = LoadLibrary("ntdll.dll");
if(!Dll) return;
NTQuery = (NTQSI)GetProcAddress(Dll,"NtQuerySystemInformation");
if(!NTQuery) return;
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION Sp;
ZeroMemory(&Sp,sizeof(Sp));
ULONG sizest = sizeof(Sp);
NtQuery(SystemProcessorPerformanceInformation,&Sp,sizest,&sizest);
Label1->Caption = (Int64ToStr)Sp.IdleTime;
...
Гдето так.
Это кстати не единственный способ вроде бы - но суббота, пиво и лень :) - остальное ищи сам.
В таблице TStringGrid нужно передать фокус (выделить) произвольной ячейке. При использовании команды TStringGrid1->FocusCell(2, 3, false), компилятор выдает ошибку: "__fastcall FocusCell(int,int,bool) is not accessible". В чём моя ошибка, помогите правильно написать команду.
Как быть, что делать???
[QUOTE=artyom-tyanutov]При попытке запуска моей проги на другом ПК не находит vcl60.bpl
А то эта функция работает только с корнем диска!!!
Как обойти ошибку???:(
[COLOR="Blue"]//в Button1Click[/COLOR]
list("c:\\");
[COLOR="#0000ff"]//сам list[/COLOR]
void __fastcall ls(AnsiString path)
{
DIR *mdir;
struct dirent *ent;
mdir=opendir(path.c_str());
[COLOR="#0000ff"]//Вот тут ошибка[/COLOR]
while((ent=readdir(mdir))!=NULL)
{
if(FileExists(path+ent->d_name) || ent->d_name=="."||ent->d_name=="..")
{
[COLOR="#0000ff"]//Файл или точки[/COLOR]
MessageBox(0,(path+ent->d_name).c_str(),"Файл",64);
}
else
{
[COLOR="#0000ff"]//Папка[/COLOR]
MessageBox(0,(path+ent->d_name).c_str(),"Папка",64);
list(path+ent->d_name);
}
}
closedir(mdir);
}
А то эта функция работает только с корнем диска!!!
Как обойти ошибку???:(
[COLOR="Blue"]//в Button1Click[/COLOR]
list("c:\\");
[COLOR="#0000ff"]//сам list[/COLOR]
void __fastcall ls(AnsiString path)
{
DIR *mdir;
struct dirent *ent;
mdir=opendir(path.c_str());
[COLOR="#0000ff"]//Вот тут ошибка[/COLOR]
while((ent=readdir(mdir))!=NULL)
{
if(FileExists(path+ent->d_name) || ent->d_name=="."||ent->d_name=="..")
{
[COLOR="#0000ff"]//Файл или точки[/COLOR]
MessageBox(0,(path+ent->d_name).c_str(),"Файл",64);
}
else
{
[COLOR="#0000ff"]//Папка[/COLOR]
MessageBox(0,(path+ent->d_name).c_str(),"Папка",64);
list(path+ent->d_name);
}
}
closedir(mdir);
}[/QUOTE]
Используй в своих сообщениях форматирование кода пожалуйста.
Код:
void __fastcall FindFiles(const String& Dir){
TSearchRec sr;
if (FindFirst(Dir, faAnyFile, sr) == 0)
{
do
{
if ((sr.Attr & faDirectory))
{
...//Здесь вызываешь функцию рекурсивно
}
else {
...//Здесь загружаешь список файлов
Memo1->lines->Add(sr.Name);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
TSearchRec sr;
if (FindFirst(Dir, faAnyFile, sr) == 0)
{
do
{
if ((sr.Attr & faDirectory))
{
...//Здесь вызываешь функцию рекурсивно
}
else {
...//Здесь загружаешь список файлов
Memo1->lines->Add(sr.Name);
}
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
Рекурсию доделай сам.
А как перебрать диски???:confused:
Доброе время суток. Хотел бы узнать, как средствами Билдера извлечь файлы из rar- или zip-архива. Спасибо.
"Borland C++Builder6 Руководство разработчика"
Авторы:
Джаррод Холингворт
Боб Сворт
Марк Кэшмэн
Поль Густавсон
Издательский дом "Вильямс"
(Москва/Санкт-Петербург/Киев)
Но в этой книге практически нет практических примеров создания программ.....
Если у вас есть какая-то полезная информация по этому вопросу или знаете полезные ссылки поделитесь пожалуйста.....
В Win9x можно так, сделав кнопку и задав ей событие:
//////////////////////////////////////////////////////////////////
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowWindow(Handle, SW_HIDE);
ShowWindow(Application->Handle, SW_HIDE);
}
////////////////////////////////////////////////////////////////////
Этот код в обработку OnFormCreate даже не пытайся засунуть - работать не будет....
Лично мне не очень нравиться С++ Builder, больше нравиться MS Visual C++.
Вот код, который в Delphi:
program Project1; //Открываем файл проекта и туда дописываем
uses
Forms, Windows/*это*/,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
EStyle : integer;//это
begin
Application.Initialize;
Estyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);//это
SetWindowLong(application.Handle, GWL_EXSTYLE, EStyle or WS_EX_TOOLWINDOW);//это
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Попробуй. Только замени точку на стрелочку, вместо var EStyle : integer; напиши int EStyle;
Вместо ':=' - '='
А так вроде все..... Я бы сам это сделал, только у меня нету С++ Builder'a на этом компе.....
[QUOTE=bloodsucker]Доброе время суток. Хотел бы узнать, как средствами Билдера извлечь файлы из rar- или zip-архива. Спасибо.[/QUOTE]
Ладно... Добавлю свой вопрос в базу знаний.
Есть ACCESS база, ADOTable.
Проблема заключается в том что при удалении дублированных данных (с одним и тем же ключом, кодом).
Возникает ошибка: Недостаточные или неполные сведения о ключевом поле. Обновление влияет на слишком большое число строк
P.S. Можно конечно запретить юзеру вводить дупликаты...но мало ли, промахнется, и введет.
В Access указать для поля Primary Key
Не помогает... Все равно, существует возможность что в этом поле, окажутся одинаковые коды...
Например у меня таблица №1
Код/Наименование
Таблица №2
Код с табл.1/код со справочника/....
Притом у Кода с табл.1 может быть несколько записей со справочника.
Например:
Таблица №1
Код/Наименование
1. Удаление опухоли
2. Удаление позвоночника
Таблица №2
Код опер./Код медик./Кол/Цена
1. 1 10шт. 100руб.
1. 2 1 шт. 10 руб.
2. 2 20 шт. 200 руб.
2. 3 1 шт. 100 руб.
2 4 2 шт. 100 руб.
1. 1 5 шт. 50 руб. - продублированная запись, если я ее попытаюсь удалить, выдается вышеприведенная ошибка
Таблица справочник
Код / Наимен. /Цена за ед.
1. Анальгин 10руб.
2. Аспирин 10 руб.
3. Стамеска 100 руб.
4 Варежки 50 руб.
??????
PrimaryKey гарантирует уникальность данных в поле (точнее гарантирует невозможность добавления неуникальных данных).
А задача программиста эту ситуацию обработать.
PrimaryKey гарантирует уникальность данных в поле (точнее гарантирует невозможность добавления неуникальных данных).
А задача программиста эту ситуацию обработать.[/QUOTE]
На счет уникальности полей, выше в таблице все сказано, т.е. человек, сегодня добавил 5 табл. анальгина, и завтра еще 10... Получается две записи с одним кодом. Понятно, что можно оградить юзера, сказать ему отредактируй старую запись и исправь на общ. количество. Но все таки реально ли, без ключевого поля работать, я же все-таки указываю, не на то, чтобы удалить данные содержащие в поле КОД цифру 1, а удалить те данные, на которых стоит курсор в гриде... Разве не так?
Чтобы Access смог удалить строку, он должен ориентироваться на какое-либо ключевое поле. Юзер может его и не видеть. Можешь ввести еще одно поле типа счетчик и сделать его ключевым.
... Мда дурень я, о самом простом и не подумал, вечно ищем тернистые пути... Большой фенкс.
Не так. Должно быть уникальное ключевое поле для каждой записи - это можно делать руками - инкрементируя максимальное значение на 1 или при помощи счетчика - это проще, но хуже управляется.
А выводить пользователю суммарное значение или каждую запись по конкретному препарату - это уже от задачи зависит.
Как сделать так, стобы всё что нарисовано на форме не стиралось когда её перекрывает другое окно???
2. Как создать массив или вектор TEdit'ов?
Спасибо.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Вектор
typedef TEdit* pTEdit;
pTEdit n = NULL;
vector<pTEdit> v;
for ( int i = 0 ; i < 10 ; i ++ )
{
n = new TEdit(Form1);
n->Name = "ed" + IntToStr(i);
n->Parent = Form1;
n->Top += i * 15;
v.push_back(n);
}
ShowMessage("");
for ( int i = 0 ; i < 10 ; i ++ )
delete v;
v.clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// Массив
typedef TEdit* pTEdit;
pTEdit n = NULL;
pTEdit m[10];
for ( int i = 0 ; i < 10 ; i ++ )
{
n = new TEdit(Form1);
n->Name = "ed" + IntToStr(i);
n->Parent = Form1;
n->Top += i * 15;
m = n;
}
ShowMessage("");
for ( int i = 0 ; i < 10 ; i ++ )
delete m;
}
{
// Вектор
typedef TEdit* pTEdit;
pTEdit n = NULL;
vector<pTEdit> v;
for ( int i = 0 ; i < 10 ; i ++ )
{
n = new TEdit(Form1);
n->Name = "ed" + IntToStr(i);
n->Parent = Form1;
n->Top += i * 15;
v.push_back(n);
}
ShowMessage("");
for ( int i = 0 ; i < 10 ; i ++ )
delete v;
v.clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// Массив
typedef TEdit* pTEdit;
pTEdit n = NULL;
pTEdit m[10];
for ( int i = 0 ; i < 10 ; i ++ )
{
n = new TEdit(Form1);
n->Name = "ed" + IntToStr(i);
n->Parent = Form1;
n->Top += i * 15;
m = n;
}
ShowMessage("");
for ( int i = 0 ; i < 10 ; i ++ )
delete m;
}
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
if (Memo1->Lines->Count>0)
{
if (MessageBox(0,"Сохранить содержимое окна редактирования? ",
"Подтвердите сохранение",MB_YESNO)==IDYES)
{
SpeedButton5Click(Sender)
}
}; вот здесь выходит ошибка....что пропущен символ...не знаю какой именно....нужна подсказка....
Memo1->Clear();
StatusBar1->Panels->Items[0]->Text="Без имени";
}
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
if (Memo1->Lines->Count>0)
{
if (MessageBox(0,"Сохранить содержимое окна редактирования? ",
"Подтвердите сохранение",MB_YESNO)==IDYES)
{
SpeedButton5Click(Sender)
}
}; вот здесь выходит ошибка....что пропущен символ...не знаю какой именно....нужна подсказка....
Memo1->Clear();
StatusBar1->Panels->Items[0]->Text="Без имени";
}[/QUOTE]
Точка с запятой после SpeedButton5Click(Sender)
пс. Все-таки просьба в исходном коде отступы делать. Трудно сообразить что где
тема не раз затрагивалась, в том числе и на этом форуме, но законченного примера кода именно для builder'а я так и не нашел, у самого не получилось - то безымянная ошибка, то несовпадение типов. там 8 параметров типа xlValues, xlByRows, как их нужно правильно записать? иначе говоря, что должно быть в скобках после Find?
Здравствуйте. У меня такая проблема: с помощью Date() получаю системную дату, затем записываю полученную дату в файл, так вот на одном компьютере дата записыается в файл в виде 08.08.2006, на другом - 08.08.06. Как программно можно изменить представление системной даты, чтобы во втором случае год записывался полностью?