xbp_listview
Moderator: Moderatoren
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
xbp_listview
Hallo,
ich habe durch Zufall einige Bilder von diesem Control, das auf ot4xb bzw. der DXE-Lib basiert, gesehen.
Wäre vermutlich ein prima Ersatz für eine "normale" Listbox, wo ich immer Probleme mit dem Setzen der Tabulatoren habe.
Nur finde ich dazu weder einen Beispielcode noch eine Beschreibung.
Setzt das jemand unter der 1.90.355 ein und kann kann mir weiterhelfen?
ich habe durch Zufall einige Bilder von diesem Control, das auf ot4xb bzw. der DXE-Lib basiert, gesehen.
Wäre vermutlich ein prima Ersatz für eine "normale" Listbox, wo ich immer Probleme mit dem Setzen der Tabulatoren habe.
Nur finde ich dazu weder einen Beispielcode noch eine Beschreibung.
Setzt das jemand unter der 1.90.355 ein und kann kann mir weiterhelfen?
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbp_listview
hi,
https://docs.microsoft.com/en-us/window ... e-messages
Pablo hat nun die Method geschrieben für die man die Konstante benötigt mit dem "richtigen" Parameter Aufrufen ... nicht "mehr".
wie nun ein Listview funktioniert und was es kann erfährt man hier
https://docs.microsoft.com/en-us/window ... s-overview
---
4 Schritte sind notwendig
1.) Konfiguration des Control :dwLvStyle mit LVS_* Konstanten
2.) Column per LVCOLUMN() Structure anlegen. Info vorher in die Structure "schreiben"
3.) Daten Bereich per LVITEM() Structure füllen ( ähnlich AddItem() )
4.) Maus/Keyboard Notify Event abfangen auf die man reagieren will z.b. NM_CLICK
bei Interesse kann ich den Demo Code von Pablo näher erläutern
---
p.s. schon mal an XbpQuickbrowse gedacht ?
beim Wrapper von Pablo ist doch ein Demo Source dabei ?
in dem Thread gibt es noch weiter Upgradesot4xb.public
Sonntag, 29. Mai 2011 23:35
playing with the listview control
wenn du dir den Wrapper Code ansiehst wirst du nur LVM_* Konstanten finden.
https://docs.microsoft.com/en-us/window ... e-messages
Pablo hat nun die Method geschrieben für die man die Konstante benötigt mit dem "richtigen" Parameter Aufrufen ... nicht "mehr".
wie nun ein Listview funktioniert und was es kann erfährt man hier
https://docs.microsoft.com/en-us/window ... s-overview
---
4 Schritte sind notwendig
1.) Konfiguration des Control :dwLvStyle mit LVS_* Konstanten
2.) Column per LVCOLUMN() Structure anlegen. Info vorher in die Structure "schreiben"
3.) Daten Bereich per LVITEM() Structure füllen ( ähnlich AddItem() )
4.) Maus/Keyboard Notify Event abfangen auf die man reagieren will z.b. NM_CLICK
bei Interesse kann ich den Demo Code von Pablo näher erläutern
---
p.s. schon mal an XbpQuickbrowse gedacht ?
gruss by OHR
Jimmy
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: xbp_listview
vielen Dank, das Beispiel hatte ich nicht gefunden - damit kann ich etwas anfangen.
Damit ist ja die Wochenend-Beschäftigung gesichert
Damit ist ja die Wochenend-Beschäftigung gesichert
ja schon - aber ich hatte gehofft, dass ich den vorhandenen Code mit der ListBox auf relativ einfache Art verbessern könnte.p.s. schon mal an XbpQuickbrowse gedacht ?
werde ich bei Bedarf gerne darauf zurückkommen, aber ich beschäftige mich erstmal mit dem Beispielbei Interesse kann ich den Demo Code von Pablo näher erläutern
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: xbp_listview
Hallo,
die Anzeige des Listviews mit den Überschriften und dem Füllen aus einer DBF habe ich problemlos hinbekommen.
Was ich nicht schaffe ist es, den Klick auf einen Eintrag auszuwerten.
Ich erhalte mit der Funktion "OnListViewClick" die Zeilennummer - soweit ist das auch OK, das würde mir genügen.
Wenn ich allerdings dann versuche mit dieser Zeilennummer als recno() einen Datensatz in der Datenbank anzuzeigen erhalte ich diese mir nicht verständliche Fehlermeldung. Die Datenbank ist definitiv geöffnet, ich lese ja vorher die Einträge ein.
Es gibt nur einen select-Bereich und auch nur den einen Thread. Außerdem würde ich gerne noch über die Überschriften eine entsprechnde Sortierung hinbekommen.
In irgendeinem Beispiel habe ich das gesehen, war allerdings nur die EXE ohne Quellcode.
die Anzeige des Listviews mit den Überschriften und dem Füllen aus einer DBF habe ich problemlos hinbekommen.
Was ich nicht schaffe ist es, den Klick auf einen Eintrag auszuwerten.
Ich erhalte mit der Funktion "OnListViewClick" die Zeilennummer - soweit ist das auch OK, das würde mir genügen.
Wenn ich allerdings dann versuche mit dieser Zeilennummer als recno() einen Datensatz in der Datenbank anzuzeigen erhalte ich diese mir nicht verständliche Fehlermeldung. Die Datenbank ist definitiv geöffnet, ich lese ja vorher die Einträge ein.
Es gibt nur einen select-Bereich und auch nur den einen Thread. Außerdem würde ich gerne noch über die Überschriften eine entsprechnde Sortierung hinbekommen.
In irgendeinem Beispiel habe ich das gesehen, war allerdings nur die EXE ohne Quellcode.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbp_listview
hi,
hier erst mal die Function für den Zugriff auf eine "Cell"
die Controls laufen im GUI-Thread während deine App die DBF im normalen Thread öffnet.
der Trick besteht nun in der Verwendeung eines Callback Slot mit einem Codeblock
in Xbase++ hat man z.b. o:ItemSelect
wenn man einen Codeblock ausfüllt wird der im GUI-Thread ausgeführt mit den Daten aus dem normalen Thread.
---
damit wird beim Start die Sortierung festgelegt
im Grund muss man "nur" den Sort Flag ändern denn das Listview hat ja die Daten.
es ist also wie ein internes ASORT() was auf die entsprechende Spalte ausgeführt wird
hier die Steuerung über das Keyboard ( o:AktiveList ist ein von mehreren Listview )
hier per Toolbar (kann man auch für ein Menu nutzen)
---
um das per Klick auf den Column Header auszulösen muss man zunächst den LVN_COLUMNCLICK Notify Event abfangen.
den leitet man nun weiter an HandleEvent
bist zur Method die den Codeblock enthält
erreichen tut man es nun aus Main Modul mit
ich hoffe das ich das ich das einigermassen verständlich erkläre.
es ist nun mal ein Control was Xbase++ nicht hat also kommt einen das alles ungewohnt vor.
Alaska liefert uns mit den XbPart schon "fertige" Controls wo z.b. die Callback Slot alle schon definiert sind.
bei den native Controls muss ich alles erst definieren und einbauen also wenn was fehlen sollte ...
Rückmeldung erwünscht.
hier erst mal die Function für den Zugriff auf eine "Cell"
Code: Alles auswählen
METHOD DXE_ArrayView:GetItem(nSel,nSub)
LOCAL cItem := ""
DEFAULT nSub TO 0 // Zero based Columne No
cItem := ::lv_GetItemText(nSel,nSub)
RETURN cItem
nun ... das liegt daran das du in einem anderen Thread bist als die DBF ...einen Datensatz in der Datenbank anzuzeigen erhalte ich diese mir nicht verständliche Fehlermeldung
die Controls laufen im GUI-Thread während deine App die DBF im normalen Thread öffnet.
der Trick besteht nun in der Verwendeung eines Callback Slot mit einem Codeblock
in Xbase++ hat man z.b. o:ItemSelect
wenn man einen Codeblock ausfüllt wird der im GUI-Thread ausgeführt mit den Daten aus dem normalen Thread.
Code: Alles auswählen
INLINE METHOD MySelect(mp1,mp2)
IF VALTYPE(Itemselect) = "B"
EVAL(Itemselect, mp1,mp2,Self)
ENDIF
RETURN
das ist im ersten Schritt ganz einfachAußerdem würde ich gerne noch über die Überschriften eine entsprechnde Sortierung hinbekommen.
Code: Alles auswählen
::SortOrder := LVS_SORTDESCENDING // oder LVS_SORTASCENDING
Code: Alles auswählen
METHOD DXE_ArrayView:Headersort( n ) // xbeP_Keyboard Menu headerLbDown
LOCAL nOldSort := ::nSubScript
IF ::SortOrder == LVS_SORTASCENDING
::SortOrder := LVS_SORTDESCENDING
ELSE
::SortOrder := LVS_SORTASCENDING
ENDIF
// Zero based so add +1
::nSubScript := n+1
// diese Zeile ist extra in meinem Source
::SortColumne(ACLONE(::aSource),::nSubScript)
RETURN NIL
es ist also wie ein internes ASORT() was auf die entsprechende Spalte ausgeführt wird
hier die Steuerung über das Keyboard ( o:AktiveList ist ein von mehreren Listview )
Code: Alles auswählen
CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_CTRL_F3
// sort Name
oDlg:AktiveList() :Headersort( LV_NAME - 1 )
CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_CTRL_F4
// sort Extension
oDlg:AktiveList() :Headersort( LV_EXT - 1 )
CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_CTRL_F5
// sort Date
oDlg:AktiveList() :Headersort( LV_DATE - 1 )
CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_CTRL_F6
// sort Size
oDlg:AktiveList() :Headersort( LV_SIZE - 1 )
Code: Alles auswählen
oToolbar1:addItem( "Name", VIEW_IMAGE_SORTNAME,,,,,,,, { || oSelf:AktiveList():Headersort( LV_NAME - 1 ),IF(oSelf:nActive=1,SP_SortLeft(LV_NAME-1),SP_SortRight(LV_NAME-1)) } )
oToolbar1:addItem( "Type", VIEW_IMAGE_SORTTYPE,,,,,,,, { || oSelf:AktiveList():Headersort( LV_EXT - 1 ),IF(oSelf:nActive=1,SP_SortLeft(LV_EXT -1),SP_SortRight(LV_EXT -1)) } )
oToolbar1:addItem( "Size", VIEW_IMAGE_SORTSIZE,,,,,,,, { || oSelf:AktiveList():Headersort( LV_SIZE - 1 ),IF(oSelf:nActive=1,SP_SortLeft(LV_SIZE-1),SP_SortRight(LV_SIZE-1)) } )
oToolbar1:addItem( "Date", VIEW_IMAGE_SORTDATE,,,,,,,, { || oSelf:AktiveList():Headersort( LV_DATE - 1 ),IF(oSelf:nActive=1,SP_SortLeft(LV_DATE-1),SP_SortRight(LV_DATE-1)) } )
um das per Klick auf den Column Header auszulösen muss man zunächst den LVN_COLUMNCLICK Notify Event abfangen.
Code: Alles auswählen
::SetLvNotifyCB( LVN_COLUMNCLICK, ;
{ | xbp, code, lp, st | st := NMITEMACTIVATE():New(), st:_write_( lp, 0, - 1 ), ;
PostAppEvent( xbeMyLv_COLUMNCLICK, st:iSubItem, st, Self ), NIL } )
Code: Alles auswählen
METHOD DXE_ArrayView:HandleEvent( nEvent, mp1, mp2 )
DO CASE
CASE nEvent == xbeMyLv_COLUMNCLICK
RETURN ::OnColumnClick( mp1, mp2 )
Code: Alles auswählen
METHOD DXE_ArrayView:OnColumnClick(nCol, oNmLv )
IF VALTYPE( ::headerLbDown ) == "B"
eval( ::headerLbDown , nCol, oNmLv , Self)
ENDIF
RETURN NIL // default processing
Code: Alles auswählen
::oLW1:headerLbDown := { | n, st | ::oLW1:Headersort( n ), SP_SortLeft(::oLW1:nSubScript) }
es ist nun mal ein Control was Xbase++ nicht hat also kommt einen das alles ungewohnt vor.
Alaska liefert uns mit den XbPart schon "fertige" Controls wo z.b. die Callback Slot alle schon definiert sind.
bei den native Controls muss ich alles erst definieren und einbauen also wenn was fehlen sollte ...
Rückmeldung erwünscht.
gruss by OHR
Jimmy
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: xbp_listview
Hallo Jimmy,
vielen Dank für deine sehr ausführliche Erklärung.
Leider reichen meine Xbase-Kenntnisse nicht aus, um das wirklich zu verstehen - vielleicht können wir etwas einfacher beginnen.
Ich habe das Codebeispiel leicht abgewandelt in mein Programm eingebaut.
Bisher werden in meinem Programm in einer Listbox alle Einträge meiner Datenbank in der unteren Bildschirmhälfte angezeigt, in der oberen Hälfte werden die Editierfelder (SLEs) zu der jeweiligen Zeile beim Klick darauf gefüllt.
Ich habe jetzt statt der Listbox das Listview dafür verwendet, das klappt hervorragend - die Anzeige ist genauso wie ich es gerne hätte.
Die Spaltenbreiten berechne ich prozentual, was bei allen Skalierungen super passt und ich mich darum nicht weiter kümmern muss.
Die Verknüpfung des Klicks auf eine Zeile mit dem Füller der SLEs bringe ich allerdings nicht hin.
Ich merke mir beim Füllen des Listviews zusätzlich die recno() des Datensatzes in einem kleinen Array (slv_array), um über die Zeile des Listviews direkt auf den betreffenden Datensatz zu kommen.
Ich verwende diesen Code, um die Zeilennummer bzw. die recno() des gewünschten Datensatzes zu erhalten, nur wie geht es weiter?
Ich weiß nicht wie/wo ich deine Methoden einbinden soll.
vielen Dank für deine sehr ausführliche Erklärung.
Leider reichen meine Xbase-Kenntnisse nicht aus, um das wirklich zu verstehen - vielleicht können wir etwas einfacher beginnen.
Ich habe das Codebeispiel leicht abgewandelt in mein Programm eingebaut.
Bisher werden in meinem Programm in einer Listbox alle Einträge meiner Datenbank in der unteren Bildschirmhälfte angezeigt, in der oberen Hälfte werden die Editierfelder (SLEs) zu der jeweiligen Zeile beim Klick darauf gefüllt.
Ich habe jetzt statt der Listbox das Listview dafür verwendet, das klappt hervorragend - die Anzeige ist genauso wie ich es gerne hätte.
Die Spaltenbreiten berechne ich prozentual, was bei allen Skalierungen super passt und ich mich darum nicht weiter kümmern muss.
Die Verknüpfung des Klicks auf eine Zeile mit dem Füller der SLEs bringe ich allerdings nicht hin.
Ich merke mir beim Füllen des Listviews zusätzlich die recno() des Datensatzes in einem kleinen Array (slv_array), um über die Zeile des Listviews direkt auf den betreffenden Datensatz zu kommen.
Ich verwende diesen Code, um die Zeilennummer bzw. die recno() des gewünschten Datensatzes zu erhalten, nur wie geht es weiter?
Code: Alles auswählen
// ---------------------------------------------------------------------------
static function OnListViewClick(oLv,lp)
local st := NMITEMACTIVATE():New()
st:_link_(lp,.F.)
//
satz=slv_array[st:iItem+1]
msgbox("Datensatz: "+str(satz,5,0))
//
return NIL // default processing
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbp_listview
hi,
bei einer Listbox() bekommt man mit o:GetData() doch ein Array mit Nummern
nun nimmt man die Nummer aus dem Array und o:GetItem(nNr) um an den "Text" zu kommen.
---
die NMITEMACTIVATE Structure gibt dir ja nur Zahlen aber nichts an Buchstaben.
https://docs.microsoft.com/en-us/window ... emactivate
mit ::lv_GetItemText(nSel,nSub) holt man sich nun den "Inhalt" von einer Cell was ein String ist.
es bezieht sich dabei auf die Member ( VAR )
die man vorher aufgefüllt hat.
für die "ROW" brauchst du nur das Ergebnis von o:iItem +1, die iSubItem haben die selbe "ROW"
! Note : Windows arbeitet Zero-based d.h. 0 ist der erste Eintrag
---
ich muss zugeben das ein "StableBlock" als Callback Slot fehlt.
Damit synchronisiere ich die ober Hälfte mit den XbpSLE wenn ich mich in einem XbpBrowse() bewege.
aus dem Grund habe ich die Function am Anfang der letzten Msg gehabt
bei einer Listbox() bekommt man mit o:GetData() doch ein Array mit Nummern
nun nimmt man die Nummer aus dem Array und o:GetItem(nNr) um an den "Text" zu kommen.
---
die NMITEMACTIVATE Structure gibt dir ja nur Zahlen aber nichts an Buchstaben.
https://docs.microsoft.com/en-us/window ... emactivate
mit ::lv_GetItemText(nSel,nSub) holt man sich nun den "Inhalt" von einer Cell was ein String ist.
es bezieht sich dabei auf die Member ( VAR )
Code: Alles auswählen
int iItem;
int iSubItem;
für die "ROW" brauchst du nur das Ergebnis von o:iItem +1, die iSubItem haben die selbe "ROW"
! Note : Windows arbeitet Zero-based d.h. 0 ist der erste Eintrag
---
ich muss zugeben das ein "StableBlock" als Callback Slot fehlt.
Damit synchronisiere ich die ober Hälfte mit den XbpSLE wenn ich mich in einem XbpBrowse() bewege.
Code: Alles auswählen
::oBrowse:stableblock := { || Ref2Gets( ::aEditControls ) }
gruss by OHR
Jimmy
Jimmy
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: xbp_listview
Wenn ich das ganze hier sehe, und dazu das Ergebnis, frage ich mich, warum man nicht ein XbpBrowse dafür nimmt ?
Gibt es Vorteile einer Listbox gegenüber einem Browse ????
Gibt es Vorteile einer Listbox gegenüber einem Browse ????
Viele Grüße
Wolfgang
Wolfgang
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbp_listview
moin,
wie schon gesagt ist der grosse Unterschied bei einem native Control das man alles selber machen muss.
der Vorteil von Listview ist das man viel mehr damit machen kann und es ein Original Windows Control ist.
das Listview wird nun von allen Sprachen unterstützt ... nur eben nicht von Xbase++
Nachteil : man muss alles erst mal lernen und eine eigene CLASS daraus machen.
ich hatte ja XbpQuickBrowse() erwähnt ...Wolfgang Ciriack hat geschrieben: ↑So, 10. Mär 2019 18:49 ... warum man nicht ein XbpBrowse dafür nimmt ?
wie schon gesagt ist der grosse Unterschied bei einem native Control das man alles selber machen muss.
der Vorteil von Listview ist das man viel mehr damit machen kann und es ein Original Windows Control ist.
das Listview wird nun von allen Sprachen unterstützt ... nur eben nicht von Xbase++
Nachteil : man muss alles erst mal lernen und eine eigene CLASS daraus machen.
gruss by OHR
Jimmy
Jimmy
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbp_listview
Für mich ist ganz praktisch gesehen der Unterschied, das eine Listbox im Aufbau langsamer ist. Weil dort erst alle Elemente hinzugefügt werden müssen, was bei längeren Listen schon mal dauern kann. Während bei einem Browse auf eine vorhandene Datenquelle (dbf, Array) zugegriffen wird. Außerdem kann ich in einem Browse mehrere Spalten verwalten und unterschiedlich einfärben. Der Nachteil eines Browses ist das der wegen der größeren Flexibilität etwas umfangreicher zu konfigurieren ist.
Ob das jetzt ein natives Windows-Element ist oder nicht ist mir letztendlich vollkommen egal. Hauptsache es funktioniert und macht Einstellungen in der Windows-Konfiguration mit (z. B. Themes).
Jan
Ob das jetzt ein natives Windows-Element ist oder nicht ist mir letztendlich vollkommen egal. Hauptsache es funktioniert und macht Einstellungen in der Windows-Konfiguration mit (z. B. Themes).
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbp_listview
das macht Alaska mit o:AddItem() so und weil viele nichts anderes kennen wird das als Tatsache hingestellt
siehe dir meine Session "pimp my Xb" an und du wirst sehen das man einer XbpListbox() auch "on-fly" ein ganzen Ordner Inhalt mit > 100000 Dateien (max. 32Kb für die Name) zuordnen kann.
der DbSkipper() für DBF ist einfach nur Mist. Vor/Zurück bis man einen Datensatz findet ... das ist (ISAM) SteinzeitJan hat geschrieben:Während bei einem Browse auf eine vorhandene Datenquelle (dbf, Array) zugegriffen wird.
Für Array / SQL ResutSet gibt es zum Glück XbpQuickBrowse() ... und die Konfiguration reicht meistens völlig aus.
wie schon gesagt sollte man über den Tellerrand von Alaska schauen und betrachten was die "anderen" als Datenquellen und "List"-Objecten verwenden.Jan hat geschrieben:Ob das jetzt ein natives Windows-Element ist oder nicht ist mir letztendlich vollkommen egal. Hauptsache es funktioniert und macht Einstellungen in der Windows-Konfiguration mit (z. B. Themes).
---
ich finde es gut das Peter sich damit beschäftigt.
ich versuche auch ihn langsam an das Thema ran zuführen und nicht abzuschrecken.
Wir arbeiten mit Windows und alle XbParts (ausser XbpBrowse) beruhen auf Windows Controls.
Xbase++ "schirmt" und ja mit vielen von Windows ab ... aber da draussen gibt es noch viel mehr
gruss by OHR
Jimmy
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: xbp_listview
Hallo,
ich muss ehrlich sagen "es ist mir zu kompliziert und ich werde es deshalb nicht weiter verfolgen".
Als Clipper-Hobbyprogrammierer denke ich da vermutlich immer noch zu prozedural. Da ich bisher in meinen eher kleinen Programmen ohne Klassencode ausgekommen bin, verstehe ich auch einfach das Zusammenspiel der verschiedenen Abläufe zu wenig.
Das listview kenne ich aus meinen Versuchen in der Android-Programmierung und setzte es dort sehr gerne zur schnellen und übersichtlichen Anzeige von Daten ein. Ich hatte gefofft, dass dieses Control unter Xbase ähnlich der normalen Listbox recht einfach zu verwenden wäre.
Da das nicht der Fall ist steht der notwendige (Lern-)Aufwand in keiner Relation zum Ergebnis.
Vielen Dank - vor allen Dingen an Jimmy - für die tolle Hilfe.
ich muss ehrlich sagen "es ist mir zu kompliziert und ich werde es deshalb nicht weiter verfolgen".
Als Clipper-Hobbyprogrammierer denke ich da vermutlich immer noch zu prozedural. Da ich bisher in meinen eher kleinen Programmen ohne Klassencode ausgekommen bin, verstehe ich auch einfach das Zusammenspiel der verschiedenen Abläufe zu wenig.
Das listview kenne ich aus meinen Versuchen in der Android-Programmierung und setzte es dort sehr gerne zur schnellen und übersichtlichen Anzeige von Daten ein. Ich hatte gefofft, dass dieses Control unter Xbase ähnlich der normalen Listbox recht einfach zu verwenden wäre.
Da das nicht der Fall ist steht der notwendige (Lern-)Aufwand in keiner Relation zum Ergebnis.
Vielen Dank - vor allen Dingen an Jimmy - für die tolle Hilfe.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: xbp_listview
Hallo, Peter.
Wenn Du mit Clipper-Syntax arbeiten, Dir dennoch die GUI-Welten erobern willst, dann schau Dir mal Roger Donnays eXpress++ an. Das ist ein in Xbase++ verfasstes Framework, das die Verwendung aller XbParts und vieler anderer Dinge mit Clipper-ähnlicher Syntax erlaubt, und dabei quasi durch die Hintertür etwas über Klassen und Objekte vermittelt, ohne dass man (direkt) damit arbeiten muss.
Hallo, Jimmy.
Wenn Du mit Clipper-Syntax arbeiten, Dir dennoch die GUI-Welten erobern willst, dann schau Dir mal Roger Donnays eXpress++ an. Das ist ein in Xbase++ verfasstes Framework, das die Verwendung aller XbParts und vieler anderer Dinge mit Clipper-ähnlicher Syntax erlaubt, und dabei quasi durch die Hintertür etwas über Klassen und Objekte vermittelt, ohne dass man (direkt) damit arbeiten muss.
Hallo, Jimmy.
Quatsch! Selbstverständlich beruht auch das XbpBrowse auf Windows Controls (bzw. -Elementen). Es gibt nur kein Browse als Windows-Control. Deshalb muss man es aus diversen Objekten zusammensetzen - wie hier geschehen. Einfach mal den Quellcode anschauen, der ist ja bei der ProfSub dabei.und alle XbParts (ausser XbpBrowse) beruhen auf Windows Controls
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbp_listview
hi Tom,
Es ist aber, wie auch XbpTabpage(), eine CLASS die selbst gebaut ist und eben kein "echtes" Windows Control deren Beschreibung man bei MSDN findet.
---
@Peter
mit prozeduralem Cl*pper Style kommt man bei Windows nicht weit ...
Eine Windows App "agiert" nicht sondern "reagiert".
als Programmierer legt man nun fest "worauf" man reagiert und was für eine "Aktion" erfolgen soll.
das passiert meisten mit einem Codeblock mit dem man den passenden Callback Slot bestückt.
das Demo von Pablo ist leider mit Function aufgebaut und schlecht zu erweitern.
man sollte alle Function zur Method machen und eine CLASS daraus bauen.
die Function (und den Aufruf) OnListViewClick() würde ich zur Method o:GetData() machen was der Xbase++ Syntax entspricht.das würde wie eine Listbox() ein Array zurück geben.
bei dieser Version wäre das "o:GetItem" schon eingebauthiermit bekommt man den "Inhalt" der Cell als String zurück.
p.s. Das Beispiel von Pablo ist NICHT für Multi-Select, also mehrere markierten Elemente, ausgelegt.
Natürlich hast du Recht das es aus XbpStatic zusammen gestellt ist was ja Windows Controls sind.Tom hat geschrieben: ↑Di, 12. Mär 2019 11:22Quatsch! Selbstverständlich beruht auch das XbpBrowse auf Windows Controls (bzw. -Elementen). Es gibt nur kein Browse als Windows-Control. Deshalb muss man es aus diversen Objekten zusammensetzen - wie hier geschehen. Einfach mal den Quellcode anschauen, der ist ja bei der ProfSub dabei.und alle XbParts (ausser XbpBrowse) beruhen auf Windows Controls
Es ist aber, wie auch XbpTabpage(), eine CLASS die selbst gebaut ist und eben kein "echtes" Windows Control deren Beschreibung man bei MSDN findet.
---
@Peter
mit prozeduralem Cl*pper Style kommt man bei Windows nicht weit ...
Eine Windows App "agiert" nicht sondern "reagiert".
als Programmierer legt man nun fest "worauf" man reagiert und was für eine "Aktion" erfolgen soll.
das passiert meisten mit einem Codeblock mit dem man den passenden Callback Slot bestückt.
das Demo von Pablo ist leider mit Function aufgebaut und schlecht zu erweitern.
man sollte alle Function zur Method machen und eine CLASS daraus bauen.
die Function (und den Aufruf) OnListViewClick() würde ich zur Method o:GetData() machen was der Xbase++ Syntax entspricht.
Code: Alles auswählen
INLINE METHOD GetData(oLv,lp)
LOCAL aRow := {}
local st := NMITEMACTIVATE():New()
st:_link_(lp,.F.)
nRow := st:iItem +1 // für Xbase++
AADD(aRow,nRow)
RETURN aRow
bei dieser Version wäre das "o:GetItem" schon eingebaut
Code: Alles auswählen
INLINE METHOD GetItemText(oLv,lp)
LOCAL nRow,nCol, cRet := ""
local st := NMITEMACTIVATE():New()
st:_link_(lp,.F.)
nRow := st:iItem
nCol := st:iSubItem
// als zero-based übernehmen
cRet := oLV:GetItem(nRow,nCol)
RETURN cRet
p.s. Das Beispiel von Pablo ist NICHT für Multi-Select, also mehrere markierten Elemente, ausgelegt.
gruss by OHR
Jimmy
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: xbp_listview
Das Auswerten des listviews war nicht mein eigentliches Problem, ich hatte ja schon die recno() des markierten Datensatzes auf den ich zugreifen möchte. Mein Problem war dann der Zugriff auf die Datenbank.
Ja, das ist mir schon klar - mit den normalen Xbase-Controls komme ich mittlerweile auch ganz gut zurecht.mit prozeduralem Cl*pper Style kommt man bei Windows nicht weit ...
Eine Windows App "agiert" nicht sondern "reagiert".
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: xbp_listview
hi,
wenn man mit dem Formdesigner eine Maske mit XbpSLE() erzeugt wird jedes XbpSLE() in ein Array aufgenommen
das Array kann man nun benutzen um alle XbpSLE zu füllen/Upzudaten
was bei mir das selbe ist wie
---
bei Listview hab ich eine Statusbar wo jeweils der aktuelle Name angezeigt wird ähnlich dem Explorer.
Der Notify Event dazu heisst LVN_ITEMCHANGED. daraus könnte man nun den "Stableblock" machen"
hast du deine XbpSLE() "gesammelt" ?
wenn man mit dem Formdesigner eine Maske mit XbpSLE() erzeugt wird jedes XbpSLE() in ein Array aufgenommen
Code: Alles auswählen
AADD(::aEditControls, oSLE1 )
Code: Alles auswählen
AEVAL(::aEditControls,{|o| o:SetData() } )
Code: Alles auswählen
Ref2Gets( ::aEditControls )
bei Listview hab ich eine Statusbar wo jeweils der aktuelle Name angezeigt wird ähnlich dem Explorer.
Der Notify Event dazu heisst LVN_ITEMCHANGED. daraus könnte man nun den "Stableblock" machen"
gruss by OHR
Jimmy
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: xbp_listview
Hallo,
ich muss dieses Thema erst einmal komplett zurückstellen da ich nach einer Netzhautablösung meine Aktivitäten am Rechner in der nächsten Zeit auf das Wichtigste beschränken muss.
ich muss dieses Thema erst einmal komplett zurückstellen da ich nach einer Netzhautablösung meine Aktivitäten am Rechner in der nächsten Zeit auf das Wichtigste beschränken muss.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbp_listview
Autsch! Nicht gut.
Gute Besserung, und bloß keine Komplikationen.
Jan
Gute Besserung, und bloß keine Komplikationen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: xbp_listview
Baldige Genesung!
Viele Grüße,
Martin
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.