Hilfestellung beim Einstieg in GUI [erledigt]

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Danke für den Wink, habs erst gesehen nachdem ich angefragt hab, :D aber jetzt zwei Varianten.
Gruß
Bruno
Messing
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Gibt's eigentlich einen Grund dafür, die ganzen Spaltendaten erst in das Array "aBrowse" zu packen, dann wieder einzeln in Variablen (x1 ... x4) umzuschichten, um es dann anschließend mit AddColumn() auszuwerten? Kommt mir unnötig kompliziert vor. Und Du verwendest "aBrowse" offensichtlich nirgendwo sonst.
Herzlich,
Tom
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Ja, ich suche erst einmal den einfachsten Weg, auch wenn dieser umständlicher ist.
Aber immer zu, ich will gern dazulernen, wenn sich das anders realisieren läßt. Vorschläge sind herzlichst willkommen :D .
Gruß
Bruno
Messing
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Vorschläge sind herzlichst willkommen
Vorschlag: Aus dem aAdd(aBrowse ...) direkt oColumn := AddColumn() machen, gleiche Parameter.
Herzlich,
Tom
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Erste Kürzung

Code: Alles auswählen

for i=1 to len(aBrowse)
oColumn:=oBrowse:addColumn(aBrowse[i][1],aBrowse[i][4],aBrowse[i][2],aBrowse[i][3],aBrowse[i][5])
oColumn:Heading:LbClick := {||MsgBox('In ' + str(oBrowse:ColPos) + ' geklickt')}
next
Gruß
Bruno
Messing
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Wenn Du dann auch noch auf die Column-Objekte anderswo zugreifen willst, wäre das hier schlau:

Code: Alles auswählen

aAdd(aBrowse[i],oBrowse:addColumn(aBrowse[i][1],aBrowse[i][4],aBrowse[i][2],aBrowse[i][3],aBrowse[i][5]))
Damit wäre das sechste Element von aBrowse das jeweilige Column-Objekt:

Code: Alles auswählen

aBrowse[i,6]:LbClick := {||MsgBox('Bin in Spalte 6')}
Achtung: Das hier funktioniert nicht (weil "i" auf Len(aBrowse)+1 steht, wenn der Codeblock ausgewertet wird):

Code: Alles auswählen

aBrowse[i,6]:LbClick := {||MsgBox('Bin in Spalte '+Str(i,1,0))}
Aber das hier:

Code: Alles auswählen

bBlock := &("{||'Bin in Spalte '"+Str(i,1,0)+"}")
aBrowse[i,6]:LbClick := bBlock
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Am Rande: Diese Notation:

Code: Alles auswählen

aBrowse[i][3]
ist nicht zwingend. Man kann auch das hier machen:

Code: Alles auswählen

aBrowse[i,3]
Das ist zwar im Ergebnis das gleiche, aber im Prinzip wird zuerst das Array aus "aBrowse" ermittelt und aus diesem dann das dritte Element geholt. Ähnlich geht man ja vor, wenn man mit Arrays als Rückgabewerten arbeitet:

Code: Alles auswählen

nWindowWidth := oWindow:CurrentSize()[1]
CurrentSize() returniert ein Array mit zwei Elementen. Das angehängte [1] bewirkt, dass diese zwei Schritte zu einem zusammengefasst sind:
a := oWindow:CurrentSize()
nWindowWidth := a[1]

Beides funktioniert übrigens auch umgekehrt:

Code: Alles auswählen

aBrowse[i,6] := 'Test' 
und

Code: Alles auswählen

aBrowse[i][6] := 'Test'
haben dasselbe Ergebnis.
Herzlich,
Tom
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Hi Tom,
habe

Code: Alles auswählen

for i=1 to len(aBrowse)
aAdd(aBrowse[i],oBrowse:addColumn(aBrowse[i][1],aBrowse[i][4],aBrowse[i][2],aBrowse[i][3],aBrowse[i][5]))
bBlock := &("{||'Bin in Spalte '+oBrowse:ColPos}")
next
keine Fehlermeldung, auch keine "Bin in Spalte"
Wann kommt der Block zur Auswertung?
Gruß
Bruno
Messing
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Vor dem NEXT müsste a) das "AddColumn" erfolgen und b) die Zuweisung von bBlock an den LbClick-Slot:

Code: Alles auswählen

  oColumn := AddColumn( ...)
  oColumn:LbClick := bBlock
NEXT
"bBlock" ist zunächst nur ein Codeblock, mit dem nichts passiert. Er wird erst ausgewertet, wenn er z.B. einem Ereignis zugewiesen wurde, wie hier dem LbClick-Slot der Spalte. Du kannst auch spaßenshalber mal das hier machen:

Code: Alles auswählen

bBlock := ...
Eval(bBlock)
Dann siehst Du - bevor das Browse aufgebaut wird - die Messagebox.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Oh, ich sehe gerade, dass Du mit ColPos arbeitest. Dann ist der Umweg über den Makro-Expander unnötig:

Code: Alles auswählen

oColumn:=AddColumn(...)
oColumn:LbClick := {||MsgBox('Bin in Spalte '+Str(oBrowse:ColPos,1,0))}
Herzlich,
Tom
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Tom hat geschrieben:Oh, ich sehe gerade, dass Du mit ColPos arbeitest. Dann ist der Umweg über den Makro-Expander unnötig:

Code: Alles auswählen

oColumn:=AddColumn(...)
Ist das := richtig?
Ich bekomme Fehler external symbol ADDCOLUMN
Gruß
Bruno
Messing
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2126
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 75 Mal

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Werner_Bayern »

Code: Alles auswählen

oBrowse:addColumn()
ist richtig!
mit

Code: Alles auswählen

oColumn:=AddColumn(...)
würdest Du der Variable oColumn den Rückgabewert einer Funktion AddColumn() zuweisen, bei AddColumn() handelt es sich jedoch um eine Methode eines xbpBrowse-Objektes.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Stimmt. Schulljung. Natürlich ist AddColumn eine Methode, weshalb sie nur in Verbindung mit dem XbpBrowse-Objekt funktioniert. So kann's gehen, wenn man Code einfach im Forum tippt. Der Rückgabewert ist aber dennoch das Column-Objekt. :wink:
Herzlich,
Tom
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Servus, wieso muß ich erst in eine Zelle klicken, bevor der Klick in der Kopfzeile die richtige Pos. anzeigt?
Gruß
Bruno
Messing
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9387
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 362 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Tom »

Zum Verständnis:

oBrowse:AddColumn() erzeugt eine Spalte für ein XbpBrowse. Die Rückgabe ist die Referenz auf das Column-Objekt. Das wiederum besteht aus (bis zu drei) XbpCellGroup-Objekten, nämlich "Heading", "DataArea" und "Footing". Die Musik spielt in der "DataArea"; eine Spalte kann auch nur aus dieser bestehen, wenn sie weder Header, noch Fußzeilen enthält. Alle drei Objekte kann man über das Column-Objekt manipulieren. oColumn:Heading ist das CellGroup-Objekt für den Header, oColumn:DataArea ist der Datenbereich (der das beinhaltet, was man bei AddColumn als Datalink angegeben hat), entsprechend oColumn:Footing der Fußzeilenbereich. Die Column selbst verfügt nicht über Slots wie LbClick (linke Maustaste gedrückt) oder RbClick (rechte Maustaste), nur die CellGroup-Objekte, aus denen die Spalte besteht, können derlei. Deshalb kann man aber umgekehrt z.B. dem Header eigene Eigenschaften für den Fall des Mausklicks verpassen. Einige Events werden vom XbpBrowse implizit verarbeitet bzw. zur Verfügung gestellt; so ist die Möglichkeit, Spaltenbreiten zu verändern, standardmäßig in der Klasse enthalten. Linksklick in den Datenbereich löst üblicherweise das ItemMarked-Event aus, das implizit zur Hervorhebung der Zelle führt. Usw.

Zu Deiner letzten Frage (Warum muss ich erst in die Zelle klicken): Die Spaltenposition wird nur durch "ItemMarked" verändert, und ColPos liefert Dir eben die Spaltenposition. Genau deshalb hatte ich in meinem Beispiel auch nicht mit ColPos gearbeitet - es liefert einen falschen Wert zurück, wenn man nur ins Heading klickt, denn die Spaltenmarkierung ändert sich hierdurch nicht.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12911
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Hilfestellung beim Einstieg in GUI

Beitrag von AUGE_OHR »

messing hat geschrieben:Hebt sich die geklickte Stelle hervor?
wenn du es so programmiertest ;)
es gibt nun verschiedene Möglichkeiten. ich will mal die mit "visual Style" beschreiben die kein Ownerdraw benötigt aber XP Manifest.

wenn man im Explorer den Arbeitsplatz öffnet und in die Detail ( Report ) Ansicht umschaltet sieht man unter XP die von Tom angesprochenen Symbole. unter Win7 wird der ganze Header "beleuchtet" wenn man darüber fährt / drauf steht während bei XP nur der orange Balken unter dem Header beim darüber fahren erleuchtet wird.

der "HOVER" Zustand (darüber fahren) ist also für den "HOT" Style zuständig was man so nutzen kann

Code: Alles auswählen

METHOD LfuBrowse:FillColumn()
...
         oCol := ::AddColumn( ::aField[ i, BRO_BLOCK ] ,;
                                 ::aField[ i, BRO_WIDE  ] ,;
                                 ::aField[ i, BRO_TITLE ] )

         oCol:heading:styleClass := "Header"
         oCol:heading:stylePart  := 1

         //
         // assign LbClick on Header with Index Order
         //
         ::getColumn( i ) :heading:lbClick := ::STR2BLOCK( i )
      NEXT

      //
      // set orange Marker under Header = XBP_STATE_HOT to active Index Column
      //
      ::getColumn( OrdNumber( OrdName() ) ):heading:controlState := XBP_STATE_HOT
...


METHOD LfuBrowse:STR2BLOCK( i )
RETURN { || ::SETMYCOL( &( STR( i ) ) ) }

METHOD LfuBrowse:SETMYCOL( nIndexNo)
LOCAL oCol
LOCAL i , imax

   imax := ::colCount
// reset all  
   FOR i := 1 TO iMax
      oCol := ::getColumn(i)
      oCol:heading:controlState := XBP_STATE_NORMAL
      oCol:heading:invalidateRect()
   NEXT

   ORDSETFOCUS( nIndexNo )
//
// if you want to set CELL Cursor into same Col
//
//   ::ColPos := nIndexNo
//   ::refreshcurrent()

// set HOT Style to active Column
   oCol := ::getColumn( nIndexNo )
   oCol:heading:controlState := XBP_STATE_HOT
   oCol:heading:invalidateRect()

   IF ::isVisible()
      ::refreshall()
   ENDIF
RETURN
meine Index Order entspricht dabei der Column Nummer.

p.s. sollte man nun Ownerdraw verwenden MUSS man GraBackground() setzten um den visual Style zu erhalten

Code: Alles auswählen

   IF BAND( aInfo[ XBP_DRAWINFO_ACTION ], XBP_DRAWACTION_DRAWBG    ) != 0
      //
      // nur fr XBP_DRAW_OWNERADVANCED
      //
      IF oArea:styleClass = "Header"
         GraBackground( oPS, { nXDest, nYDest }, { nWidth, nHeight } )
      ELSE
p.s. ich habe den Effekt in PDR_LFU eingebaut siehe http://www.xbaseforum.de/viewtopic.php?f=16&t=5699
gruss by OHR
Jimmy
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Danke füe die Info,
habe mit

Code: Alles auswählen

oColumn:Heading:LbClick := {|mp1,mp2,obj|MsgBox('In ' + obj:ReferenceString + ' geklickt')}
erstmal das was Angezeigt werden soll, wenn man draufklickt. Darauf wollte ich hinaus, die Richtige Meldung an entsprechender Stelle.
Ich muß somit nicht erst eine Spalte auswählen, sondern kann gleich im Header über der entsprechenden Spalte die Info abrufen, in welches CellGroup Objekt ich geklickt hab.
Ich muß zugeben, wenn ich die Augen nicht aufmach

Code: Alles auswählen

oColumn:Heading:LbClick := {||MsgBox('In '  + str(oBrowse:ColPos) + ' geklickt')}
Parameter für Codeblock = LEER, dann guten Morgen! :D
Ich hab die halbe Nacht überlegt, wieso ich nicht die richtige Info bekomme :banghead: , wenn ich nur im Header klicke. Vergebens! :banghead:
Um 09:10 Uhr bin ich dann "wach geworden" :D . Dem Codeblock was mitgeben, damit er antworten kann. :D
Das ganze geht auch mit

Code: Alles auswählen

oColumn:Heading:ItemMarked := {|mp1,mp2,obj|MsgBox('In ' + obj:ReferenceString + ' geklickt')}
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Servus,
Habe jetzt das Ziel erreicht, das ich mit Header Klick eine Inexveränderung bekomme.

Code: Alles auswählen

oColumn:Heading:ItemMarked := {|mp1,mp2,obj|IndexWechsel(mp1,mp2,obj),oBrowse:refreshall()}

FUNCTION IndexWechsel(mp1,mp2,obj)
altindex:=ordsetfocus(1)
Zellwert:=obj:getcell(mp1)
if Zellwert="Fahrer"
   ordsetfocus(4)
endif
if Zellwert="Kunde"
   ordsetfocus(3)
endif
if Zellwert="Trans-Art"
   ordsetfocus(7)
endif
cNeuindex:=ordsetfocus()
return cNeuindex
Das mit der MsgBox hab ich zum besseren Verständnis benutzt, um erstmal einen Teil der Möglichkeiten von XbpCellGroup kennenzulernen.
Danke an alle für Eure Unterstützung, wieder etwas mehr in der Birne :D
Gruß
Bruno
Messing
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Servus,
hab kleines Problem mit XbpBrowse. Genauer gesagt vermute ich das. Habe ein DLG für Eingabe und ein DLG für Browse.
Starte ich das Browse, funktioniert alles, inkl. Indexwechsel über Spaltenkopf. Mache ich dann die Eingabe auf, ist das Browse hinfällig.
Ich hab die Datenbanken für das Browse und die Eingabe getrennt geöffnet. Eingabe = DBF öffnen, Browse = DBF öffnen. Habe in beiden verschiedene ALIAS. Wenn ich von der Eingabe ins Browse klicke, zeigt dasBrowse erstmal etwas anderes an, wenn ich dann versuch den Index zu wechseln, bekomme ich Fehlermeldung:

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "P:\XPPW32\Projects\a\DISPO.exe" Datum: 30.04.12 14:14:18

Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows Vista 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Datenbank-Alias existiert nicht/ist ungltig
oError:filename :
oError:genCode : 66
oError:operation : ->
oError:osCode : 0
oError:severity : 2
oError:subCode : 8022
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von (B)ANSICHT(86)
Aufgerufen von XBPCOLUMN:DRAWROW(644)
Aufgerufen von (B)XBPBROWSE:DRAWROW(2131)
Aufgerufen von XBPBROWSE:DRAWROW(2131)
Aufgerufen von XBPBROWSE:FORCESTABLE(1143)
Aufgerufen von XBPBROWSE:HANDLEEVENT(1497)
Aufgerufen von XBPBROWSE:REFRESHROWS(2342)
Aufgerufen von XBPBROWSE:REFRESHALL(2266)
Aufgerufen von (B)ANSICHT(68)
Aufgerufen von EINGABE(769)
Aufgerufen von (B)MAIN(391)
Aufgerufen von XBPPUSHBUTTON:HANDLEEVENT(968)
Aufgerufen von MAIN(435)
Gruß
Bruno
Messing
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15700
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 69 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von brandelh »

wie schließt du die Datei nach der Eingabe ?

Code: Alles auswählen

close alias   // immer genau angeben was geschlossen werden soll
2 mal die gleiche Datei offen, da gibt es Probleme mit dem Text Alias, ich nutze daher immer den numerischen Selectbereich ...

Code: Alles auswählen

use ...
if neterr()
   fehlermeldung()
else 
   ::nAlias := select()
endif 

im Closeevent des Fensters dann ...

if (::nAlias)->(used())
   (::nAlias)->(dbcloseArea())
endif
Gruß
Hubert
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Hi Hubert,
was mich wundert, mache ich erst das Browse auf und dann die Eingabe, sobald ich dann ins Browse gehe,ist das Browse nicht mehr so wie es war.
Gruß
Bruno
Messing
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16546
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 114 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von Martin Altmann »

Moin Konstantin,
darum der Hinweis von Hubert bezüglich des Alias()es. Vergibst Du einen beim Öffnen? Wenn nicht, heißt der erste wie die DBF und der zweite ist der Name der DBF ergänzt um die Select()ed Workarea, in der sie geöffnet ist. Ich gleube, getrennt durch einen -.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15700
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 69 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von brandelh »

messing hat geschrieben:sobald ich dann ins Browse gehe,ist das Browse nicht mehr so wie es war.
das ist ein deutliches Zeichen dafür, dass du zwar (wie beschrieben) die Datei zweifach öffnest,
tatsächlich aber immer im gleichen Alias bist. Wenn du dann nach Edit diesen schließt ist alles weg ;-)

Code: Alles auswählen

select 1
use test.dbf shared
? Alias(), selected() => TEST, 1
select 2
use test.dbf shared
? Alias(), selected() => TEST_2, 2  (ich denke dass dies der automatisch vergebene Alias ist)
select TEST wird immer 1 auswählen, denn der zweite heist ja TEST_2 ...

Nach der Anleitung muss jedes Fenster das den Focus erhält, seinen Alias einstellen,
wenn man einen Alias teilt, muss man noch Satznummer und Index syncronisieren ... oder darf das nicht ändern.
Durch obige Problematik kommt man aber leicht aufs falsche Gleis:

Code: Alles auswählen

use Test // gedacht und tatsächlich TEST
Mybrowse()
...
function edit(nRecNo)
    use Test  // gedacht TEST, tatsächlich aber z.b. TEST_2
    select TEST  // böser Fehler !!!!
    ...
    close TEST  // bald danach wird es krachen !!!!
return nil
Ich nutze wie geschrieben ausschließlich den numerischen Select-Bereich und kenne solche Probleme nicht ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15700
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 69 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Hilfestellung beim Einstieg in GUI

Beitrag von brandelh »

du kannst natürlich auch den ALIAS Namen vorgeben gerade in temporären Fenstern macht das Sinn:

Code: Alles auswählen

use MeinElendLangerDBFNameFürDieAbteilungXYZ ALIAS LISTDB
...
function 
     use MeinElendLangerDBFNameFürDieAbteilungXYZ ALIAS EDITDB
     ...
Aber wehe wenn das 2. MDI Fenster noch einen ALIAS LISTDB anlegen will ...

PS: laut Doku soll man Threads nutzen um das Problem zu umgehen, wer das vorzieht ... ;-)
Gruß
Hubert
Benutzeravatar
messing
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 216
Registriert: Mi, 13. Jan 2010 9:42
Wohnort: Lauterbach / Hessen

Re: Hilfestellung beim Einstieg in GUI

Beitrag von messing »

Servus, habe das ganze als ZIP beigepackt. Ich öffne die Datenbanken mit versch. ALIAS, und trotzdem hakts. Einzeln läuft alles ok, aber sobald ich erst die Liste aufmache und das das Eingabefenster, ist das Browse in seinem urspr. Aufbau nicht mehr da, sonder zeigt was anderes.
Dateianhänge
b.zip
Projekt bis zum heutigen Tag 30.04.2012
(1.36 MiB) 122-mal heruntergeladen
Gruß
Bruno
Messing
Antworten