Problem mit DCBrowse

Moderator: Moderatoren

Antworten
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Problem mit DCBrowse

Beitrag von Bertram Hansen »

Hallo Leute,

ich bin gerade dabei den Sourcecode in Bezug auf Speicherauslastung zu überprüfen. Dabei bin ich auf ein Problem gestoßen bei dem ich nicht weiterkomme. Ich habe ganz am Anfang eine PUBLIC Variable definiert mit den Presentation-Parameter für das DCBROWSE.

Code: Alles auswählen

// Font für das Browse
PUBLIC gcBrowseFont := "10.Courier New"   
PUBLIC gaBrowPres := { ;
                       { XBP_PP_COL_DA_BGCLR, GRA_CLR_BACKGROUND },;             /* Row BG Color     { 102,   0 }*/
                       { XBP_PP_COL_DA_ROWHEIGHT, 13  },;                        /* Row Height       { 107,  10 }*/
                       { XBP_PP_COL_HA_HEIGHT, 10 },;                            /* Header Height    { 122,  10 }*/
                       { XBP_PP_COL_FA_HEIGHT, 10 },;                            /* Footer Height    { 129,  10 }*/
                       { XBP_PP_COMPOUNDNAME, gcBrowseFont };
                     }   
Das DCBROWSE rufe ich irgendwo anders folgendermaßen auf:

Code: Alles auswählen

@ 1,1 DCBROWSE oBrowse DATA aArray                          ;
      SIZE 30, 8                                            ;
      CURSORMODE XBPBRW_CURSOR_ROW                          ;
      FIT                                                   ;
      PRESENTATION gaBrowPres                               ;
      NOHSCROLL                                             ;
      PREEVAL {|o| o:xbpBrowse:adjustHeight := .T.}         ;
      ID "BROWSE"                                           ;
      POINTER n
Bei jedem Aufruf von diesem DCBROWSE wird an die Variable "gaBrowPres" der Eintrag <{105, "10.Courier New"}> hinten drangehangen.

Inhalt vorher:

Code: Alles auswählen

{{102, -2}, {107, 13}, {122, 10}, {129, 10}, {15, "10.Courier New"}}
Inhalt nachher:

Code: Alles auswählen

{{102, -2}, {107, 13}, {122, 10}, {129, 10}, {15, "10.Courier New"}, {105, "10.Courier New"}}
Wenn ich jetzt in der Funktion wo ich das DCBROWSE aufrufe eine lokale Variable mit den gleichen Presentation-Parameter definiere und diese beim DCBROWSE verwende, dann wird die Variable nicht verändert. Ist ja auch klar, weil ich Sie nicht verwende.

Code: Alles auswählen

LOCAL aBrowPres := { ;
                     { XBP_PP_COL_DA_BGCLR, GRA_CLR_BACKGROUND },;             /* Row BG Color     { 102,   0 }*/
                     { XBP_PP_COL_DA_ROWHEIGHT, 13  },;                        /* Row Height       { 107,  10 }*/
                     { XBP_PP_COL_HA_HEIGHT, 10 },;                            /* Header Height    { 122,  10 }*/
                     { XBP_PP_COL_FA_HEIGHT, 10 },;                            /* Footer Height    { 129,  10 }*/
                     { XBP_PP_COMPOUNDNAME, gcBrowseFont };
                   }   
         
@ 1,1 DCBROWSE oBrowse DATA aArray                          ;
      SIZE 30, 8                                            ;
      CURSORMODE XBPBRW_CURSOR_ROW                          ;
      FIT                                                   ;
      PRESENTATION aBrowPres                                ;
      NOHSCROLL                                             ;
      PREEVAL {|o| o:xbpBrowse:adjustHeight := .T.}         ;
      ID "BROWSE"                                           ;
      POINTER n
Warum aber passiert das bei der Verwendung der Public Variablen? Und warum mit dem Wert 105?
XBP_PP_COMPOUNDNAME hat den Wert 15 in der Include Datei.

In dem Quellcode von Roger habe ich im PRG-File _dcxbrow.prg im Verzeichnis \source\dclipx folgenden Code gefunden:

Code: Alles auswählen

xFont := aGetListItem[cGETLIST_FONT]
IF !Empty(xFont)
  IF Valtype(xFont) == 'B'
    xFont := Eval(xFont)
  ENDIF
  DC_PresAdd( aArray, { XBP_PP_COMPOUNDNAME, xFont } )
ENDIF
Aber daran kann es nicht liegen, weil wie gesagt XBP_PP_COMPOUNDNAME den Wert 15 hat.

Damit man das auch "Live" sehen kann, habe ich ein kleines Demoprogramm beigefügt.
Dateianhänge
meinbrowse.zip
(31.19 KiB) 255-mal heruntergeladen
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Problem mit DCBrowse

Beitrag von Tom »

Hallo, Bertram.

105? Sicher nicht 115?
Die ergäbe sich nämlich aus XBP_PP_COL_DA_BASE (100) + XBPCOL_DA_COMPOUNDNAME (15). Wenn doch 105, wird sich der Wert ähnlich zusammensetzen. Einige Defines sind "stand-alone", andere sind Offsets.
Herzlich,
Tom
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Problem mit DCBrowse

Beitrag von Bertram Hansen »

Hallo Tom,

nur der Eintrag {105, "10.Courier New"} wird jedesmal drangehangen.

Stimmt denn an meiner Logik etwas nicht? Habe ich irgendwo einen "Klopper" drin?

Alle DCBROWSE Aufrufe auf lokalen Variablen umzustellen bedeutet jede Menge Fleißarbeit.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Problem mit DCBrowse

Beitrag von Wolfgang Ciriack »

Hallo Bertram,
Alle DCBROWSE Aufrufe auf lokalen Variablen umzustellen bedeutet jede Menge Fleißarbeit.
Das brauchst du doch gar nicht.
Definiere einmal eine lokale Variable gaBrowPres am Anfang deiner Anwendung und setze die als Default mit

Code: Alles auswählen

DC_BrowPres(gaBrowPres)
In deinen Browses setzt du dann nur

Code: Alles auswählen

...DCBROWSE...PRESENTATION DC_BrowPres()
Viele Grüße
Wolfgang
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Re: Problem mit DCBrowse

Beitrag von Bertram Hansen »

Hallo Wolfgang,

so etwas ähnliches ist mir auch die Nacht eingefallen. Danke! :wink: Trotzdem verursacht auch dieser Lösungsvorschlag eine Menge Codeänderungen.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Antworten