StringGrid и все-все-все
Вопросы:
1. Как в ячейку StringGrid'а вывести несколько строк с новой строки?
2. Как текст в ячейке нормировать (слева, по центру, справа)?
3. Как поменять шрифт отдельно взятой ячейки?
4. Как объеденить колонки одной строки?
5. Если с помощью StringGrid'а этого всего нельзя реализовать, то как можно выйти из положения?
Заранее благодарен.
Как мне загрузить мой текст в TCppWebBrowser не пользуясь файлами. Чере поток. Перерыл нет, но нашел только примеры с Delphi. Перевести на великий и могучий c++ не вышло (не заладилось со строкой "WebBrowser->Document as IPersistStreamInit").
Кто может, помогите советом.
И еще вопрос.
Надо переконвертировать массив char[n] в WORD;
Заранее благодарен.
Как мне загрузить мой текст в TCppWebBrowser не пользуясь файлами. Чере поток. Перерыл нет, но нашел только примеры с Delphi. Перевести на великий и могучий c++ не вышло (не заладилось со строкой "WebBrowser->Document as IPersistStreamInit").
Кто может, помогите советом.
TStringList *text = new TStringList();
IPersistStreamInit *psi;
text->Add("head");
text->SaveToStream(stm);
stm->Seek(0,0);
TStreamAdapter *sa = new TStreamAdapter(stm, soReference);
if (SUCCEEDED(Web->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))
psi->Load(*sa);
delete stm;
delete text;
delete psi;
delete sa;
delete sa;
это не удаляется
if (SUCCEEDED(Web->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))
psi->Load(*sa);
Тем не менее, исправил. Все та же ошибка.
if (SUCCEEDED(Web->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))
psi->Load(*sa);
Тем не менее, исправил. Все та же ошибка.
перед загрузкой из потока Web->Document должен быть не равен NULL
Вариант: делать Web->Navigate(WideString("about :blank"));
но при таком подходе сложности будут с картинками (ссылками на них)
">"
Меня это совсем не устраивает. Порылся в документации Билдера, ничего, что могло бы "очистить окно" не нашел. Есть ли ф-ия, которая позволяет сделать такое, или какой-то подход? (для справки - я хочу вывести средствами языка HTML таблицу. Стандарные и другие компоненты не устраивают)
">"
Меня это совсем не устраивает. Порылся в документации Билдера, ничего, что могло бы "очистить окно" не нашел. Есть ли ф-ия, которая позволяет сделать такое, или какой-то подход? (для справки - я хочу вывести средствами языка HTML таблицу. Стандарные и другие компоненты не устраивают)
Вариант1: Выучить ХТМЛ и писать на ХТМЛ, а затем загружать его в IHTMLDocument2
Вариант2: В MSDN смотреть про интерфейсы IHTMLDocument2, IHTMLTable, IHTNLTableRow и т.п. вот пример, спасибо тов. GIZMO
Кои были найдены и безжалостно удалены (я сам, вот этими вот руками выводил на экран символ ">").
Приведу пример кода, который позволяет загрузить в TCppWebBrowser текст, не используя файлы. C++ Builder. (надеюсь, теперь поиск у людей ответа на этот вопрос сработает хорошо)
TStringList *text = new TStringList();
IPersistStreamInit *psi;
text->Add("<html>");
text->Add("<body>");
text->Add("Надо ж, работает");
text->Add("</body>");
text->Add("</html>");
Web->Navigate(WideString("about :blank"));
text->SaveToStream(stm);
stm->Seek(0,0);
TStreamAdapter *sa = new TStreamAdapter(stm, soReference);
if (SUCCEEDED(Web->Document->QueryInterface(IID_IPersistStreamInit,(void **)&psi)))
psi->Load(*sa);
psi->Release();
delete stm;
delete text;
Спасибо за помощь.
В text надо добавить строку HTML кода. Все бы хорошо, но данная строка не может содержать имена переменных (а в этом-то и суть всего сыр-бора). Т.е. нельзя записать что-то вроде:
text->Add("Надо ж, работает" + some_var1 + "еще что-то" + some_var2);
(много разных строк, много разных переменых)
Как можно реализовать такую возможность? Очень надо!
В text надо добавить строку HTML кода. Все бы хорошо, но данная строка не может содержать имена переменных (а в этом-то и суть всего сыр-бора). Т.е. нельзя записать что-то вроде:
text->Add("Надо ж, работает" + some_var1 + "еще что-то" + some_var2);
(много разных строк, много разных переменых)
Как можно реализовать такую возможность? Очень надо!
не совсем понятно что же в итоге должно получиться...
если этот текст должен отобразится в браузере то смотри в МСДН IHTMLElement
и что за переменные?
Обычная HTML строка:
text->Add("<td height='35' width='50' bgcolor='#FFCC33'> <center> 1x1 </center> </td>");
А теперь надо сделать так, чтобы вместо цифр 35 и 40 стояли переменные:
int row_height, row_width;
И вместо текста 1x1 стояла какая-то переменная:
string some;
Т.е. в итоге я генерирую HTML код.
Обычная HTML строка:
text->Add("<td height='35' width='50' bgcolor='#FFCC33'> <center> 1x1 </center> </td>");
А теперь надо сделать так, чтобы вместо цифр 35 и 40 стояли переменные:
int row_height, row_width;
И вместо текста 1x1 стояла какая-то переменная:
string some;
Т.е. в итоге я генерирую HTML код.
это все есть в IHTMLTable, IHTMLTableCell, IHTMLTableCol, IHTMLTableRow, IHTMLElement и в том примере от GIZMO
PS: можно генерить и вот так: WideString html = "<td height=" + row_height + "width="+row_width +" bgcolor='#FFCC33'> <center>"+some+"</center> </td>";
Похоже, все-таки придется посмотреть эти компоненты
Похоже, все-таки придется посмотреть эти компоненты
Вот эта штука WideString() работает и с TStringList.
Спасибо за помощь!
Надо в
list<String> some
загрузить содержимое строк полей базы данных.
Могу получить доступ к этим строкам используя DBGrid, но совсем мне этого не надо.
Как получить доступ к этим строкам, минуя DBGrid, напрямую, через ADOTable (или как-то еще)?
Заранее благодарен
А как можно получить количество этих строк (конкретного поля)?
int n = ADO_TABLE->RecordCount;
Возвращается максимальное колчество строк в каком-нибудь столбце, а не кол-во строк в данном.
Возвращается максимальное колчество строк в каком-нибудь столбце, а не кол-во строк в данном.
Количество строк в любом столбце таблицы совпадает с количеством строк в самой таблице. Если имелось в виду получение количества не пустых строк в столбце, то можно воспользоваться фильтрацией (свойства Filter и Filtered) для столбца, а затем получить количество строк в таблице. Либо использовать для этих целей SQL-запрос.
Можно небольшое пример?
P.S. Я понимаю, что мой вопрос из разряда "глупее не придумаешь", но я действительно не смог найти ответа. А он очень нужен.
Можно небольшое пример?
P.S. Я понимаю, что мой вопрос из разряда "глупее не придумаешь", но я действительно не смог найти ответа. А он очень нужен.
По фильтрам:
Свойство Filtered разрешает/запрещает фильтрацию (true/аalse).
Свойство фильтр имеет формат (строка):
<Поле> <оператор сравнения> <'Значение'>.
Значение обязатьльно заключать в кавычки. Для того, чтобы не путаться с ними есть функция QuotedStr, которая ззанимается этим.
Допустим нужно отфильтровать записи с полем Фамилия соответствующим Иванов. Тогда в фильтр пишем строку:
'Фамилия=' + QuotedStr('Иванов').
Если значение поля содержит несколько фрагментов (слов, например), его берем в квадратные скобки: [город Москва].
Помимо равенства можно использовать также >, < и т. д.
Также в фильтр можно записывать несколько условий. Например, отфильтруем строки с полем Число лежащим в пределах от 1 до 10.
'Число>=' + QuotedStr('1') + 'and Число <=' + QuotedStr('10')
По основам SQL можешь почитать статью Фленова: Язык запросов SQL. В pdf где-то 0,5 М весит. Там все описано как раз для новичков - просто и понятно.
ADOTable->Filter = name + '=' + QuotedStr(' ');
ADOTable->Filtered = true;
Ругается, что аргументы имеют неверный тип, выходят за пределы и вообще все плохо.
Где я накосячил (напомню, что надо скрыть все пустые строки столбца, и посчитать кол-во непустые)?
ADOTable->Filter = name + '=' + QuotedStr(' ');
ADOTable->Filtered = true;
Ругается, что аргументы имеют неверный тип, выходят за пределы и вообще все плохо.
Где я накосячил (напомню, что надо скрыть все пустые строки столбца, и посчитать кол-во непустые)?
http://forum.codenet.ru/showthread.php?t=43058&highlight=Filter
пользуйся поиском и справкой для начала...
пользуйся поиском и справкой для начала...
Прочитал. Перечитал. Соответственно, сделал и переделал. Все та же ошибка.
Начнем с начала. Как должна выглядеть строка, которая отфильтрует пустые строки?
Some_field = ''
Вот так:
Some_field = ' '
Или так:
Some_field = 'NULL'
Или как-то по другому?
Нужна помощь, очень нужна.
Начнем с начала. Как должна выглядеть строка, которая отфильтрует пустые строки?
Some_field = ''
Вот так:
Some_field = ' '
Или так:
Some_field = 'NULL'
Или как-то по другому?
ну написаноЖ в справке черным по английски Some_field = NULL
int ARow, TRect &Rect, TGridDrawState State)
{
int acol;
int arow;
char buf[128];
if ([COLOR="Red"]State == gdFixed[/COLOR]) Abort(); // ошибка вот здесь
StringGrid->Canvas->Font = Font;
StringGrid->Canvas->Font->Color = clWindowText;
StringGrid->Canvas->Brush->Color = clWindow;
StringGrid->Canvas->FillRect(Rect);
StrPCopy(buf, StringGrid->Cells[acol][arow]);
// и ниже:
DrawText(StringGrid->Canvas->Handle, buf, -1, [COLOR="Red"]Rect[/COLOR], DT_SINGLELINE || DT_VCENTER || DT_NOCLIP || DT_LEFT);
}
int ARow, TRect &Rect, TGridDrawState State)
{
int acol;
int arow;
char buf[128];
if ([COLOR="Red"]State == gdFixed[/COLOR]) Abort(); // ошибка вот здесь
StringGrid->Canvas->Font = Font;
StringGrid->Canvas->Font->Color = clWindowText;
StringGrid->Canvas->Brush->Color = clWindow;
StringGrid->Canvas->FillRect(Rect);
StrPCopy(buf, StringGrid->Cells[acol][arow]);
// и ниже:
DrawText(StringGrid->Canvas->Handle, buf, -1, [COLOR="Red"]Rect[/COLOR], DT_SINGLELINE || DT_VCENTER || DT_NOCLIP || DT_LEFT);
}
а ф чом вопрос то? прога работает? если да, то ниче не трогай
ошибки я выделил красным... если бы всё работало я бы не спрашивал. :)
по поводу 1-го хз...
по поводу 1-го хз...
Тут все просто:
TGridDrawState это набор - Set, т.е. будет
if(State.Contains(gdFixed))
но у меня следующая проблема, мой StringGrid загружается динамически.
И надписи в таблице не прорисовыаются.
но у меня следующая проблема, мой StringGrid загружается динамически.
И надписи в таблице не прорисовыаются.
код покажь!
{
for (int n = 0; n<=UserGrid->RowCount; n++)
{
UserGrid->Cells[1][n] = "";
UserGrid->Cells[2][n] = "";
}
UserGrid->RowCount = 2;
UserGrid->FixedRows = 1;
}
Заполняю я таблицу следующим образом:
ADOQuery->Close();
ADOQuery->SQL->Clear();
ADOQuery->SQL->Add("...");
ADOQuery->SQL->Add("...");
try
{
ADOQuery->Open();
while (!ADOQuery->Eof)
{
UserGrid->Cells[1][col] = ADOQuery->FieldByName("...")->AsInteger;
UserGrid->Cells[2][col] = Trim(ADOQuery->FieldByName("...")->AsString);
UserGrid->RowCount++;
col++;
ADOQuery->Next();
}
}
catch(...)
{
MessageDlg("Ошибка!", mtError, TMsgDlgButtons() << mbOK, 0);
...
}