Foro | | | | Peter Gückstock | ¡Hola, Yo bin todavía no largo aquí en el Comunidad y komme todavía no bastante así klar, wo y cómo Yo mi Frangen a el richtigen Punto escribir. Yo versuche lo simplemente hier.
Mein Problema es folgendes: Yo habe una DB III Datenbank en eien Listbox eingelesen. In el Listbox markiere Yo una Línea y möchte ahora el Feldinhalte des entsprechenden Datensatzes para el weitere Berechnung obtener. Für una Lösungsvorschlag wäre Yo Euch dankbar. (Bin Principiante con qualmendem Kopf) KompilierenMarcaSeparaciónProgramm-Kasse
unter Verwendung von Programm-Listbox4, Autor: Gerhard Putschalka
------Deklarationen
Declare LiBox&,BonBox1&,Zeile&,Anzahl&,BOk%,Anz_Spalten%,X%,Feld$,Zeile$,Lv_Liste#
Declare Dlg%,Ende%,InpFile$,SatzN%,OpCod$,Datum$,Betrag$,BOk%,Tx$,LV_Zeile&,Lv_Item#,LV_Selected#
declare LV_ColMask&,Listbox&,Number#,TxtBER#,Bon$,Bon3$,Bbox&,Kassieren%,UBox&
declare Epreis!,Gegeben!,EPreis$,Menge%,Posten!,Summe!,Umsatz!,Zurück!,übernehmen%,Art$,E%,S$
declare Bon2$,Bon1$,Bon0$,Zeilennummer%,Zeilennummer$,Index&,DsNr$,DsNr%
-----Definition der Funktion (link zum API)
Def @CreateWindowEx(12) ! USER32,CreateWindowExA
def GetSysColor(1) !USER32,GetSysColor
Def @GetSelectedCount(1) @Sendmessage(@&(1),$1032,0,0)
Dim TxtBer#,255 max. Textlänge einer Listboxzeile (sollte genügend groß sein)
Dim NumBer#,300 Größe = maximal auszuwählende Zeilen * 4 (bei Bedarf erweitern)
===========
Prozeduren
============
-----Modul1 Spalten für die Listbox erstellen
Proc Erstelle_Spalte
Parameters Handle&,Maske&,Format&,Pixel&,Text$,Spalte&
Long Lv_Liste#,0 = Maske&
Long Lv_Liste#,4 = Format&
Long Lv_Liste#,8 = Pixel&
Long Lv_Liste#,12 = @add(Lv_Liste#,36)
Long Lv_Liste#,16 = 220
Long Lv_Liste#,20 = Spalte&
string Lv_Liste#,36 = Text$
@sendmessage (Handle&,$101B,Spalte&,Lv_Liste#)
Inc Anz_Spalten%
Return
Endproc
------Erstellen der Listboxen, Butten u.s.w.
Proc Erstelle_Dialog
Let Dlg% = @CreateDialog(%Hwnd,Angebot,0,0,800,580)
let Ende% = @createbutton(Dlg%,beenden,10,500,80,24)
Let BOk% = @CreateButton(Dlg%,übernehmen,100,410,90,24)
Let Kassieren% = @CreateButton(Dlg%,Kassieren,8,450,80,20)
Usefont Ms Sans Serif,16,0,0,0,0
setdialogfont 1
Dim Lv_Liste#,256
String Lv_Liste#,0 = SysListView32 muß SysListView32 lauten
String Lv_Liste#,20 =
Let LiBox& = @CreateWindowEx($0000280,Lv_Liste#,Lv_Liste#,$50408205,5,5,290,400,
Dlg%,1,%hinstance,$200)
@SendMessage(LiBox&,$1036,0,$00000023) setze extended Style. $23 ist liniert.
Let BBox& = control(LISTBOX,,$54A00148,550,50,200,350,
Dlg%,2001,%HINSTANCE,$00020000)
let UBox&=control(LISTBOX,,$54200140,250,80,280,60,
Dlg%,2001,%HINSTANCE,$00020121)
-------Einfügen der Spalten in die Listbox
Erstelle_Spalte LiBox&,15,0,40,Nr.,0
Erstelle_Spalte LiBox&,15,0,120,Artikel,1
Erstelle_Spalte LiBox&,15,0,100,Preis,2
Erstelle_Spalte BonBox1&,15,0,40,Nr.,0
Let Anz_Spalten% = 3 initialisiere Spaltenzähler
----- initialisieren der Bereich für spätere Verwendung
Long Lv_Liste#,0 = 1 Maske
Long Lv_Liste#,4 = 0
Long Lv_Liste#,8 = 0
Long Lv_Liste#,12 = 0
Long Lv_Liste#,16 = 0
Long Lv_Liste#,20 = @add(Lv_Liste#,36)
Long Lv_Liste#,24 = 220
Long Lv_Liste#,28 = 0
Long Lv_Liste#,32 = 0
Return
EndProc
----------------------------------------------------
-----------------------Zeile hinzufügen
Proc Add_Zeile füge eine Zeile zum Listview hinzu. Zeile& enthält die Zeilennummer.
Declare X1%
Long Lv_Liste#,4 = Zeile& Zeile
Long Lv_Liste#,8 = 0 Spalte
Let X1% = 1 Schleifen- und Indexzähler
String Lv_Liste#,36 = @$(X1%)
@Sendmessage (LiBox&,$1007,0,Lv_Liste#) Text in 1. Spalte
Texte für die Spalten 2 - 3
While (X1% < 3)
Long Lv_Liste#,8 = X1%
Inc X1%
String Lv_Liste#,36 = @$(X1%)
@Sendmessage(LiBox&,4142,Zeile&,Lv_Liste#) Text in Folgespalte
EndWhile
Return
---------------------------
Auswerten was selektiert wurde.
Mit der Message $0190 wird ermittelt wieviele
Zeilen markiert wurden.
Mit der Message $0191 werden die Nummern der markierten Zeilen als LongInteger
(= jeweils 4 Stellen) in die Bereichsvariable NumBer# übernommen.
danach werden in der 2. Schleife mit der Message $0189 die gespeicherten
Zeilennummern ausgelesen und damit die jeweilige Textzeile in die Bereichsvariable
TxtBer# übernommen.
Let X%=0
Let Anzahl&=@Sendmessage(ListBox&,$0190,0,0)
@Sendmessage(ListBox&,$0191,Anzahl&,NumBer#)
WhileNot (X% = Anzahl&)
Let Index& = @Long(NumBer#,@Mul(X%,4)) Zeilennummer holen
@Sendmessage(ListBox&,$0189,Index&,TxtBer#) Text aus der Liste holen
Inc X%
EndWhile
EndProc
===========================================================
============Hier beginn mein Problem:======================
===========================================================
Proc Berechnen
---------------------------jetzt Eingabe, wieviele Artikel
Menge%=0
Menge%=@Input$(Anzahl:,ausgewählter Artikel,Menge%) funktioniert
-------------------------
Das Einlesen der Datenbank funktioniert auch .
Jetzt möchte ich die Datensatznummer zur Bearbeitung erhalten, die der markierten
Zeile in der Listbox entspricht.
@dbOpen(#1,Sortiment_dbf.dbf)
@dbUse(#1)
DsNr$=Index& mein Gedanke, Datensatznummer gleich Index von markierter Zeile
@dbgo(DsNr$) und dann zum entsprechenden Datensatz gehen
geht aber nicht
Momentan erhalte ich dummerweise immer den ersten Datensatz.
die Berechnungen würden mit den richtigen Werten aus der DB auch funktionieren
Epreis$=@dbGet$(Preis) jetzt Preise berechnen und in Bon schreiben
Art$=@dbGet$(Artikel)
EPreis!=@val(EPreis$)
Posten!=Menge%*EPreis!
Decimals 2
Summe!=Summe!+Posten!
Decimals 2
Umsatz!=Summe!
Decimals 2
Bon$=str$(Menge%),art$, Str$(EPreis!), ,str$(Summe!)Str$(TxtBer#,0
Bon3$=der Umsazt beträgt,str$(Umsatz!)
@AddString(Bbox&,Bon$)
endproc
-----Modul Rückgeld berechnen
proc Rückgeld
let Gegeben!=@input$(Bitte den vom Kunden erhaltenen Betrag eingeben,Eingabe,Gegeben!)
Decimals 2
Zurück!=Gegeben!-Summe!
Decimals 2
UseFont Arial,16,0,0,0,0
SetDialogFont 1
@AddString(Ubox&,Bon3$)
endproc
-----Modul Kassierung
proc Summe
Bon3$=Summe,str$(Summe!)
Bon2$=Gegeben,str$(Gegeben!)
Bon1$=Rückgeld,str$(Zurück!)
@Addstring(BBox&,--------------------)
@Addstring(BBox&,Bon0$)
@Addstring(BBox&,Bon3$)
@Addstring(BBox&,Bon2$)
@Addstring(BBox&,Bon1$)
@Addstring(BBox&,Vielen Dank)
endproc
========================
Programm Start
========================
Erstelle_Dialog erstelle Dialog, ListView, erstelle die Spalten
Let Zeile& = 0
jetzt öffnen wir die Kundendatei und lesen alle Sätze in die Listbox ein.
Let Anzahl& = @dbOpen(#1,Sortiment_dbf.dbf)
@dbUse(#1)
Let SatzN% = 0
Let OpCod$ = |<
While (SatzN% < Anzahl&)
Inc SatzN% erhöhe Satzzahl
@dbGo(OpCod$)
Add_Zeile @dbGet$(lfdNr),@dbGet$(Artikel),@dbGet$(Preis)
Let OpCod$ = > für nächster Satz
Let Zeile& = (Zeile& + 1) erhöhe Zeilennummer
EndWhile
----------------------------------
WhileNot @GetFocus(Ende%) 1. Schleife bis beenden Button gedrückt wurde
Hier kommen noch andere Module rein.
if getfocus(BOK%)
Berechnen
Endif
if getfocus(Kassieren%)
Rückgeld
summe
endif
-----------------Programm beenden
waitkey warte auf Ende-Button
EndWhile Ende_Schleife
let E%=MessageBox(Wirklich beenden?,Programmende,282)
-----------------Arrays freigeben
Dispose TxtBer#
Dispose NumBer#
Dispose Liste#
@ dbClose(# 1)
end
|
| | | | |
| | | movido después de Programación / Allgemein / Einsteigerfragen
Bitte Fuente siempre con [ code] quelltext [ /code] einkapseln - habs oben korgieriert.
Welche Profanversion Usted nutzt solltest Usted en Su Signatur eintragen. |
| | | | |
| | Thomas Freier | Siehe dir el Listbox7 a, como se el erklärt. Aus allen Feldern uno Línea se una String producido, en el el Felder (Spalteninhalt) por una Tabulatorbyte (oder @Chr$(09) ) getrennt voluntad. Diese Signo voluntad entonces por / oder Andere .......con @Translate$(Feld$,, / ) ersetzt. Der Inhalt uno Feldes se entonces con @Substr$(Feld$,N,/) ermittelt (N = Spalte). Soll direkt en una Datensatz el Datenbank zurückgegriffen voluntad, z.B. en MEMO-Felder auszulesen, es sinnvoll, en el 1. Spalte con BREITE=0, el Datensatznummer (&dbRecNo) a speichern.
Saludo Thomas Freier |
| | | | |
| | Peter Gückstock | Hola Tomás,
Yo möchte mich para mi späte Antwort entschuldigen, pero yo war betrieblich eingespannt y había para media PC gar no Tiempo mehr.
vielen Dank para Su Ayuda, lo funktioniert ahora. Aber ahora Yo zwei weitere Fragen: 1. ¿Cómo se puede uno el Schriftart y el Zeichengröße beim Einlesen el Daten de el Datenbank en el Listbox verändern (zB. el Schrift vergrößern)? Mi Versuche con setfont waren ergebnislos. 2. Kann uno individual Datensätzen en el Listbox diferente Schriftfarbe zuordnen? (en z.B. zusammengehörige Datensätze de los otro farblich a unterscheiden)
Mi Profanversion: 6.6
Saludo Peter Gückstock |
| | | | |
| | Thomas Freier | ¡Hola Peter,
Schriftänderung para Dialoge usw. sólo encima UseFont S,N1,N2,N3,N4,N5 Lo puede sólo Farben para el Tabla, no para una Spalte oder Línea vorgegeben voluntad (mein Kenntnisstand). Gruppendarstellung Tuve por Einsatz de Icons getestet. El necesario sí no el de Profano como en el Ejemplo ser. Pero Geschmackssache. Um deine Wünsche umzusetzen, kommst du Yo no en Franks LISTVIEW herum. Lohnt se para Einsteiger aber sólo de XProfan 8.0 . El Anpassung para 6.6 es no así simplemente. Also SH-Xprofan 8/9 y Franks LISTVIEW hier besorgen y testen. Como el LISTVIEW Shareware es, sería Yo heute XProfan 10 testen, d.h., el Ayuda Expediente hier besorgen y studieren, si el Versión alles el qué du realisieren willst sin Franks LISTVIEW kann.
Saludo Thomas |
| | | | |
| | Thomas Freier | Apéndice:
se lo en Profano 6.6 bleiben y Gruppen por Icons gekennzeichnet voluntad, hier después de Iconen suchen ( Michael Wodrich ?) oder con > Z-Icon.exe Tool puede Sie no sólo vorhandene Icon-Archivos bearbeiten, >pero auch Icons de Archivos z.B. EXE, DLL y ICL auslesen, Editar..... beschaffen y en el eigenen Programa el Profano-Icon con >P-Icon-Changer.exe (debería hier para encontrar ser) austauschen.
Saludo Thomas |
| | | | |
| | Michael Wodrich | Hola Tomás,
como hast Usted wohl Su HTML-Info en una Notepad-Ventana para Umkopieren elaborado... Hay no Links mehr en Deinem Texto.
Yo no Icons en meiner HP. Und algo como en Datenbanken a ermöglichen, como hilft el ListView de Frank Abbing. Auch el Einfärben el Zeilen es así posible.
¿Puede Su Posting sí otra vez bearbeiten y el Links hinzufügen. Über el Editfenster el Globus con el Kettenglied benutzen...
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 24.02.2007 ▲ |
| |
| | | Um Links para enviar necesario esta simplemente sólo reinkopiert voluntad - URLs voluntad doch vollautomatisch en Links konvertiert... |
| | | | |
| | Thomas Freier | ¡Hola Michael,
verwende eigentlich en el Principio no Links. Auch en el Vereinswebseiten, deren Webmaster Yo bin, voluntad en el Gästebuch no Links zugelassen oder de me abgeändert. Denke, así puede ser el leidige Thema, gerade hier sólo diskutiert, de el Weg ir. Zu el Icons : hier oder bajo profano.de hatte uno una ZIP con Iconen angeboten. Wer? In Gerhards Listview - para Profano 6.6 - kann el 1.Spalte una Icon zugeordnet voluntad. Selbst verwendet . So como Peter Gückstock lo antes ha, Artikelgruppen deutlicher hervorzuheben, würden sí einfarbige Icons reichen, el él bien incluso con IrfanView.exe oder el Z-Icon.exe de : Andreas Baumann Softwareservice Flottenstr. 58 D-13407 Berlin redactar kann. Webadresse en el Programa no benannt. Ursprung: 1999/2002. Irgendwo beim Suchen después de Icon-Programmen el Downloadadresse gefunden.
Saludo Thomas |
| | | | |
| | Peter Gückstock | Gracias para Eure Tipps. Yo habe el así gelöst: Jeder Artikel el Gleichen Gruppe bekommt en el ersten Feld el Datenbank el gleiche Ziffer zugewiesen. Nach el Einlesen en el Listbox y anschließendem Sortieren después de dieser Spalte Yo zusammenhängende Blöcke obtener.
Saludo Peter G. |
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 4 subscriber: |