Hilfestellung beim Einstieg in GUI [erledigt]
Moderator: Moderatoren
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
Bruno
Messing
- Tom
- 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
Tom
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
Aber immer zu, ich will gern dazulernen, wenn sich das anders realisieren läßt. Vorschläge sind herzlichst willkommen .
Bruno
Messing
- Tom
- 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
Vorschlag: Aus dem aAdd(aBrowse ...) direkt oColumn := AddColumn() machen, gleiche Parameter.Vorschläge sind herzlichst willkommen
Tom
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
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
Bruno
Messing
- Tom
- 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
Code: Alles auswählen
aAdd(aBrowse[i],oBrowse:addColumn(aBrowse[i][1],aBrowse[i][4],aBrowse[i][2],aBrowse[i][3],aBrowse[i][5]))
Code: Alles auswählen
aBrowse[i,6]:LbClick := {||MsgBox('Bin in Spalte 6')}
Code: Alles auswählen
aBrowse[i,6]:LbClick := {||MsgBox('Bin in Spalte '+Str(i,1,0))}
Code: Alles auswählen
bBlock := &("{||'Bin in Spalte '"+Str(i,1,0)+"}")
aBrowse[i,6]:LbClick := bBlock
Tom
- Tom
- 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
Code: Alles auswählen
aBrowse[i][3]
Code: Alles auswählen
aBrowse[i,3]
Code: Alles auswählen
nWindowWidth := oWindow:CurrentSize()[1]
a := oWindow:CurrentSize()
nWindowWidth := a[1]
Beides funktioniert übrigens auch umgekehrt:
Code: Alles auswählen
aBrowse[i,6] := 'Test'
Code: Alles auswählen
aBrowse[i][6] := 'Test'
Tom
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
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
Wann kommt der Block zur Auswertung?
Bruno
Messing
- Tom
- 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
Code: Alles auswählen
oColumn := AddColumn( ...)
oColumn:LbClick := bBlock
NEXT
Code: Alles auswählen
bBlock := ...
Eval(bBlock)
Tom
- Tom
- 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
Code: Alles auswählen
oColumn:=AddColumn(...)
oColumn:LbClick := {||MsgBox('Bin in Spalte '+Str(oBrowse:ColPos,1,0))}
Tom
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
Ist das := richtig?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(...)
Ich bekomme Fehler external symbol ADDCOLUMN
Bruno
Messing
- Werner_Bayern
- 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
Code: Alles auswählen
oBrowse:addColumn()
mit
Code: Alles auswählen
oColumn:=AddColumn(...)
Werner
<when the music is over, turn off the lights!>
- Tom
- 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
Tom
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
Bruno
Messing
- Tom
- 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
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.
Tom
- AUGE_OHR
- 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
wenn du es so programmiertestmessing hat geschrieben:Hebt sich die geklickte Stelle hervor?
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
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 fr XBP_DRAW_OWNERADVANCED
//
IF oArea:styleClass = "Header"
GraBackground( oPS, { nXDest, nYDest }, { nWidth, nHeight } )
ELSE
Jimmy
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
habe mit
Code: Alles auswählen
oColumn:Heading:LbClick := {|mp1,mp2,obj|MsgBox('In ' + obj:ReferenceString + ' geklickt')}
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')}
Ich hab die halbe Nacht überlegt, wieso ich nicht die richtige Info bekomme , wenn ich nur im Header klicke. Vergebens!
Um 09:10 Uhr bin ich dann "wach geworden" . Dem Codeblock was mitgeben, damit er antworten kann.
Das ganze geht auch mit
Code: Alles auswählen
oColumn:Heading:ItemMarked := {|mp1,mp2,obj|MsgBox('In ' + obj:ReferenceString + ' geklickt')}
Bruno
Messing
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
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
Danke an alle für Eure Unterstützung, wieder etwas mehr in der Birne
Bruno
Messing
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
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 ungltig
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)
Bruno
Messing
- brandelh
- 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
Code: Alles auswählen
close alias // immer genau angeben was geschlossen werden soll
Code: Alles auswählen
use ...
if neterr()
fehlermeldung()
else
::nAlias := select()
endif
im Closeevent des Fensters dann ...
if (::nAlias)->(used())
(::nAlias)->(dbcloseArea())
endif
Hubert
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
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.
Bruno
Messing
- Martin Altmann
- 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
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
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.
- brandelh
- 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
das ist ein deutliches Zeichen dafür, dass du zwar (wie beschrieben) die Datei zweifach öffnest,messing hat geschrieben:sobald ich dann ins Browse gehe,ist das Browse nicht mehr so wie es war.
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)
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
Hubert
- brandelh
- 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
Code: Alles auswählen
use MeinElendLangerDBFNameFürDieAbteilungXYZ ALIAS LISTDB
...
function
use MeinElendLangerDBFNameFürDieAbteilungXYZ ALIAS EDITDB
...
PS: laut Doku soll man Threads nutzen um das Problem zu umgehen, wer das vorzieht ...
Hubert
- messing
- Rekursionen-Architekt
- Beiträge: 216
- Registriert: Mi, 13. Jan 2010 9:42
- Wohnort: Lauterbach / Hessen
Re: Hilfestellung beim Einstieg in GUI
- Dateianhänge
-
- b.zip
- Projekt bis zum heutigen Tag 30.04.2012
- (1.36 MiB) 122-mal heruntergeladen
Bruno
Messing