Zum Inhalt springen

kaldemor

Mitglieder
  • Gesamte Inhalte

    26
  • Benutzer seit

  • Letzter Besuch

Beiträge von kaldemor

  1. Danke für die Hinweise!

    1. Frage: Ja, es können mehrere Benutzer das Programm nutzen.

    (Server, Terminalverbindung)

    2. Hinweis: New, Delete: Hab alles überprüft, delete wird immer dann nicht verwedet wenn try/catch aufgerufen wurde + Programmabsturz.

    In diesem Fall wird der Speicher nicht freigegeben.

    3. Hinweis: Können Speicherlecks ExecuteSQL() in die bringen?

    Mfg,

    tocha

  2. Update gibt TRUE zurück.

    Ob es eine Fehlermeldung gibt, dass weiß ich nicht!

    Das Problem tritt sehr selten auf um es nachvollziehen zu können.

    Es sind Datensätze vorhanden.

    Obwohl habe ich bedenken, dass Daten erst nach 5 s. aktualisiert werden (PageTimeout = 5000)

    ODBC: Access 2000

    Visual C++, MFC, Version 6.0

    liegt das Problem ev. beim Open() mit snapshot?

    if( dbDatabase.IsOpen() == 0 )

    return FALSE;

    rs = new CRecSet(&dbDatabase);

    if( !rs->Open(CRecordset::snapshot, "TABELLE", CRecordset::none) )

    {

    dbDatabase.Close();

    AfxMessageBox("Problem beim Öffnen TabelleSet");

    return FALSE;

    }

    Mfg,

    kaldemor

  3. Hi,

    beim ausführen von ExecuteSQL() wird der Datensatz nicht aktualisiert.

    Dieses Problem taucht nur selten auf und deswegen kann ich es nicht nachvollziehen voran es liegen kann?

    ODBC: Access2000

    Entwicklungsumgebung: MS C++, MFC

    z. B.

    Dieser Code wird im Programm immer aufgerufen wenn ein Vorgang abgeschlossen ist

    CString strSql;

    long lVorlaufigeNr, lNeueNr;

    lVorlaufigeNr = 10001775;

    lNeueNr = 12331;

    try

    {

    //UINT III_ID, LPCTSTR III_TEXTID, LONG lWert

    rs->m_strFilter.Format("L_ID = %d AND STR_ID = '%s'", III_ID, III_TEXTID);

    rs->Requery();

    if(rs->GetRecordCount() > 0 )

    {

    rs->Edit();

    rs->m_L_ID = III_ID;

    rs->m_STR_ID = III_TEXTID;

    rs->m_L_FORMAT = 0;

    rs->m_STR_RET = "";

    rs->m_L_RET = lWert;

    rs->Update();

    }

    strSql.Format("Update MyTabelle Set Nummer = %ld, Status = TRUE Where Nummer = %ld AND Status = FALSE", lNeueNr, lVorlaufigeNr);

    dbDatabase.ExecuteSQL(strSql); // Datensatz wird in seltenen Fällen nicht aktualisiert

    }

    catch(CDBException *e)

    {

    AfxMessageBox(e->m_strError, MB_ICONEXCLAMATION);

    e->Delete();

    return FALSE;

    }

    Hat jemand eine Idee?

    Mfg,

    kaldemor

  4. Hi,

    beim ausführen von ExecuteSQL() wird der Datensatz nicht aktualisiert.

    Dieses Problem taucht nur selten auf und deswegen kann ich es nicht nachvollziehen voran es liegen kann?

    z. B.

    Dieser Code wird im Programm immer aufgerufen wenn ein Vorgang abgeschlossen ist

    CString strSql;

    long lVorlaufigeNr, lNeueNr;

    lVorlaufigeNr = 10001775;

    lNeueNr = 12331;

    try

    {

    //UINT III_ID, LPCTSTR III_TEXTID, LONG lWert

    rs->m_strFilter.Format("L_ID = %d AND STR_ID = '%s'", III_ID, III_TEXTID);

    rs->Requery();

    if(rs->GetRecordCount() > 0 )

    {

    rs->Edit();

    rs->m_L_ID = III_ID;

    rs->m_STR_ID = III_TEXTID;

    rs->m_L_FORMAT = 0;

    rs->m_STR_RET = "";

    rs->m_L_RET = lWert;

    rs->Update();

    }

    strSql.Format("Update MyTabelle Set Nummer = %ld, Status = TRUE Where Nummer = %ld AND Status = FALSE", lNeueNr, lVorlaufigeNr);

    dbDatabase.ExecuteSQL(strSql); // Datensatz wird in seltenen Fällen nicht aktualisiert

    }

    catch(CDBException *e)

    {

    AfxMessageBox(e->m_strError, MB_ICONEXCLAMATION);

    e->Delete();

    return FALSE;

    }

    Hat jemand eine Idee?

    Mfg,

    kaldemor

  5. Hallo,

    wie kann man Höhe und Breite von einem Richedittext ermitteln?

    Hab mit dem Beispiel aus MSDN versucht -> Programmabsturz.

    // The pointer to my rich edit control.

    CRichEditCtrl* pmyRichEditCtrl;

    // A pointer to a printer DC.

    CDC* pMyPrinterDC;

    FORMATRANGE fr;

    // Get the page width and height from the printer.

    long lPageWidth = ::MulDiv(pMyPrinterDC->GetDeviceCaps(PHYSICALWIDTH),

    1440, pMyPrinterDC->GetDeviceCaps(LOGPIXELSX));

    long lPageHeight = ::MulDiv(pMyPrinterDC->GetDeviceCaps(PHYSICALHEIGHT),

    1440, pMyPrinterDC->GetDeviceCaps(LOGPIXELSY));

    CRect rcPage(0, 0, lPageWidth, lPageHeight);

    // Format the text and render it to the printer.

    fr.hdc = pMyPrinterDC->m_hDC;

    fr.hdcTarget = pMyPrinterDC->m_hDC;

    fr.rc = rcPage;

    fr.rcPage = rcPage;

    fr.chrg.cpMin = 0;

    fr.chrg.cpMax = -1;

    pmyRichEditCtrl->FormatRange(&fr, TRUE);

    // Update the display with the new formatting.

    RECT rcClient;

    pmyRichEditCtrl->GetClientRect(&rcClient);

    pmyRichEditCtrl->DisplayBand(&rcClient);

    Hat jemand eine andere Idee?

    Mfg,

    kaldemor

  6. z.B. erstelle vorher zwei Klassen von Deinen Dialogmasken dlgFirstPropPage dlgSecondPropPage (abgeleitet von CPropertyPage)

    void CWaWiApp::OnAufrufAusdemMenue ()

    {

    CPropertySheet dlgSheet("MyTest");

    dlgSheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;

    dlgSheet.AddPage(&dlgFirstPropPage);

    dlgSheet.AddPage(&dlgSecondPropPage);

    dlgSheet.DoModal();

    }

    Mfg,

    kaldemor

  7. Zitat: GetTextExtent überschreiben

    Ist es der richtige Ansatz mit

    m_pRichEditTemp->FormatRange(&fr, TRUE);

    m_pRichEditTemp->GetClientRect (&Rect);

    oder bin ich auf dem Holzweg?

    Zitat: CRichEditCtrl::StreamIn

    Daran hab ich es auch gedacht.

    Nun die Lösung (etwas umständlich):

    CGridCellRich* pCell=(CGridCellRich*) m_Grid.GetCell(1, 1);

    if (pCell)

    pCell->SetRichText(Text);

    m_Grid.SetItemText(1,1, Text);

    void CGridCellRich::SetRichText(CString str)

    {

    EDITSTREAM es;

    es.dwCookie = (DWORD)&str;

    es.pfnCallback = MyStreamInCallback;

    m_pRichEditTemp->StreamIn(SF_RTF, es);

    }

    // Funktion MyStreamInCallback hab ich von CodeProject. Free source code and programming help

    DWORD CALLBACK CGridCellRich::MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff,

    LONG cb, LONG *pcb)

    {

    CString* str = ( ( CString* ) dwCookie );

    #ifdef _UNICODE

    // Unicode is only supported for SF_TEXT, so we need

    // to convert

    LPCTSTR ptr = str->GetBuffer( (*str).GetLength() );

    int length = ::WideCharToMultiByte( CP_UTF8, 0, ptr, -1, NULL, 0, NULL, NULL );

    int max = min( cb, length );

    if( length )

    {

    char* buff = new char[ length ];

    ::WideCharToMultiByte( CP_UTF8, 0, ptr, -1, buff, length + 1, NULL, NULL );

    strncpy( (LPSTR) pbBuff, buff, max );

    delete[] buff;

    }

    str->ReleaseBuffer();

    #else

    int max = min( cb, (*str).GetLength() );

    strncpy( ( LPSTR ) pbBuff, (*str) , max );

    #endif

    (*str) = (*str).Right( (*str).GetLength() - max );

    *pcb = max;

    return 0;

    }

    Mfg,

    Kaldemor

  8. FormatRange wird bereits in CGridCellRich::Draw() eingesetzt.

    Oder soll ich die GetText() überschreiben?

    Jetzt habe ich ein größeres Problem:

    Text eine Zelle mit m_Grid.SetItemText(1,1, _T(„TEXT“)) einfügen/überschreiben.

    Jetzt möchte ich den RichTextfeld aus meiner Datenbank auslesen und diesen in

    eine bestimmte Zelle einfügen. Wenn man jetzt den Richtext nicht in normales Text

    umwandeln darf, da ja die Formatierung verloren geht, wie soll man da sonst vorgehen?

    Mfg,

    kaldemor

  9. Frage zu meinem aller ersten Problem:

    Wenn ich die Schriftgröße vom Text ändere und AutoSizeRow() aufrufe, wird die Zellenhöhe fasch ermittelt. Ist auch logisch, da die Funktion GetText() einen Richtext zurück gibt.

    Hab versucht den Richtext in nur Text (SF_TEXT) umzuwandeln, hab aber wegen pCell->EndEdit() keinen Bezug auf Richeditfeld mehr. Was muß ich vorher beachten?

    Gibt es andere Möglichkeit den Richtext umzuwandeln?

    CSize CGridCellBase::GetCellExtent(CDC* pDC).

    {

    CSize size;

    CString str, Text;

    Text = GetText();

    if (Text.Left (6)=="{\\rtf1")

    {

    CInPlaceRichEdit* prich = NULL;

    prich->GetRichText();

    size = GetTextExtent(Text, pDC);

    }

    else

    size = GetTextExtent(GetText(), pDC);

    }

    void CGridCellRich::GetRichText(CString& str)

    {

    EDITSTREAM es;

    COOKIE cookie;

    es.dwCookie = (DWORD)&cookie;

    es.pfnCallback = GetEditStreamCallback;

    m_pRichEditTemp->StreamOut(SF_TEXT, es);

    str = cookie.strText;

    }

    // Beispiel um Schriftgröße zu ändern

    CGridCellRich* pCell=(CGridCellRich*) m_Grid.GetCell (m_Grid.GetFocusCell().row, m_Grid.GetFocusCell().col);

    CString strFontSize;

    int iIndex = 0;

    iIndex = m_CBGroesse.GetCurSel();

    if( iIndex != CB_ERR )

    m_CBGroesse.GetLBText(iIndex, strFontSize);

    if (pCell)

    {

    pCell->SetFontSize( atoi(strFontSize) );

    pCell->EndEdit();

    m_Grid.AutoSizeRow(row);

    m_Grid.Invalidate();

    }

    Mfg,

    kaldemor

  10. Hallo,

    hab weitere Probleme mit Richeditgrid.

    Wenn ich ein einer Zelle nur ein Wort (die Zelle enthält mehrzeiligen Text)

    markiere und die Schriftart oder Fontgröße verändere -> ist OK.

    Wenn ich aber den gesamten Text markiere und Fontgröße ändere, dann andere Zelle aktiviere, enthält diese Zelle scheinbar auch diese Formatierung.

    Mein verdacht ist das der Vorgang nicht ganz abgeschlossen ist, so dass

    die Zeiger nicht freigeben werden.

    Beispiel:

    CGridCellRich* pCell=(CGridCellRich*) m_Grid.GetCell (m_Grid.GetFocusCell ().row,m_Grid.GetFocusCell ().col);

    if (pCell)

    pCell->SetUnderline();

    //*****************************************

    void CGridCellRich::SetUnderline ()

    {

    if (!m_bEditing)

    return;

    CHARFORMAT CharFormat;

    CharFormat.cbSize=sizeof(CharFormat);

    CharFormat.dwMask=CFM_UNDERLINE;

    CharFormat.dwEffects=CFE_UNDERLINE;

    CRichEditCtrl* pRich=(CRichEditCtrl*) m_pEditWnd;

    pRich->SetSelectionCharFormat (CharFormat);

    // pRich = NULL;

    }

  11. Jetzt weiß ich es warum ich es nicht funktiniert hat.

    Im Projekt gridctrl_demo226 wird ein Benutzersteuerelement IDC_GRID verwendet. In der Datei GridCtrlDemo.rc hab ich die Style wie folgt

    CONTROL "Custom1",IDC_GRID,"MFCGridCtrl",WS_TABSTOP

    |ES_MULTILINE|ES_WANTRETURN,7,7,477,297 geändert. Projekt bereinigt und neu erstellt. Das hat leider keine Änderungen bei Darstellung von mehrzeiligen Text bewirkt.

    Die Lösung:

    Benutzersteuerelement IDC_GRID löschen und Element, wie Projekt RichEditGrid erstellen:

    m_RichEditTemp.Create (WS_CHILD|ES_MULTILINE|ES_WANTRETURN, CRect(0,0,0,0),this,IDC_RICHEDIT_TEMP);

    Vielen Dank für Hilfe an Klotzkopp!

    Mfg,

    kaldemor

  12. Genau so einen Grid suche ich bzw. versuche es zu programmieren.

    TAdvStringGrid example 30

    oder

    im diesem Projekt http://www.codeproject.com/KB/miscctrl/gridctrl.aspx

    hab ich die Projektklassen von http://www.codeproject.com/KB/miscctrl/mdricheditgrid.aspx eingefügt.

    DT_SINGLELINE durch DT_WORDBREAK ersetzt.

    Bei Create von Richeditfeld setze ich die Parameter ES_MULTILINE und ES_WANTRETURN um multiline usw. zu unterstützen

    CInPlaceRichEdit::CInPlaceRichEdit()

    {

    DWORD dwEditStyle = WS_BORDER|WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|ES_MULTILINE|

    ES_WANTRETURN|dwStyle;

    if (!Create(dwEditStyle, rect, pParent, nID))

    return;

    }

    Meiner meiner Meinung liegt das Problem in der Funktion

    BOOL CGridCellRich::Draw()

    Danke für die Antworten!

    mfg,

    kaldemor

  13. Viele kennen bestimmt das Projekt CGridCtrlDemo von Chris Maunder.

    Es gibt auch ein Grid mit CRichEditCtrl Unterstützung (CInPlaceRichEdit, ES_WANTRETURN | ES_MULTILINE, usw.).

    Leider funktioniert es nicht so richtig.

    Erstes Problem:

    Wenn ich mehre Textzeilen in einer Zelle erfasse und diese dann verlasse so wird immer nur die erste Zeile angezeigt. Ich hab versucht die Funkt. Drawtext() anzupassen (DT_CALCRECT |DT_WORDBREAK). Ohne sichtbaren Veränderungen.

    Zweites Problem:

    In der Zelle markiere ich eine(n) Text bzw. Buchstabe und verändere die Schriftgröße.

    Wird auch richtig ausgeführt, aber die Zellenhöhe (row) wird nicht bzw. falsch angepaßt.

    Ist ja auch logisch da bei zeichnen und rowheight ermitteln Richedittext verwendet wird.

    Mein Problem ist, wann und welcher Stelle ich den Richedittext in ein String umwandeln soll!?

    Hat jemand eine Idee

  14. Viele kennen bestimmt das Projekt CGridCtrlDemo von Chris Maunder.

    Es gibt auch ein Grid mit CRichEditCtrl Unterstützung (CInPlaceRichEdit, ES_WANTRETURN | ES_MULTILINE, usw.).

    Leider funktioniert es nicht so richtig.

    Erstes Problem:

    Wenn ich mehre Textzeilen in einer Zelle erfasse und diese dann verlasse so wird immer nur die erste Zeile angezeigt. Ich hab versucht die Funkt. Drawtext() anzupassen (DT_CALCRECT |DT_WORDBREAK). Ohne sichtbaren Veränderungen.

    Zweites Problem:

    In der Zelle markiere ich eine(n) Text bzw. Buchstabe und verändere die Schriftgröße.

    Wird auch richtig ausgeführt, aber die Zellenhöhe (row) wird nicht bzw. falsch angepaßt.

    Ist ja auch logisch da bei zeichnen und rowheight ermitteln Richedittext verwendet wird.

    Mein Problem ist, wann und welcher Stelle ich den Richedittext in ein String umwandeln soll!?

    Hat jemand eine Idee?

    mfg,

    kaldemor

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...