Forum | | | | Peter Gückstock | Salut, je suis encore pas longtemps ici dans qui Community et viens encore pas entier so bien sûr, wohin et comment je mon Frangen à qui richtigen Stelle schreibe. je versuche es simple ici.
mon Problem ist folgendes: j'ai une DB III banque de données dans eien Listbox lire. dans qui Listbox markiere je une la ligne et voudrais maintenant qui Feldinhalte des entsprechenden Datensatzes pour qui weitere Berechnung conservé. Pour une Lösungsvorschlag wäre je Euch reconnaissant. (suis Débutant avec qualmendem tête) KompilierenMarqueSéparationProgramm-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
|
| | | | |
| | | déménagé pour Programmation / Allgemein / Einsteigerfragen
s'il te plaît Source toujours avec [ code] quelltext [ /code] einkapseln - habs dessus korgieriert.
quelle Profanversion Du utilise devrait Du dans Votre Signatur eintragen. |
| | | | |
| | Thomas Freier | Siehe dir qui Listbox7 à, là wird cela erklärt. Aus allen Feldern einer la ligne wird un String erzeugt, dans dem qui Felder (Spalteninhalt) par un Tabulatorbyte (ou bien @Chr$(09) ) getrennt volonté. cet marque volonté ensuite par / ou bien autre .......avec @Translate$(champ$,, / ) ersetzt. qui le contenu eines Feldes wird ensuite avec @Substr$(champ$,N,/) ermittelt (N = Spalte). Soll direct sur une Datensatz qui banque de données zurückgegriffen volonté, z.B. um MEMO-Felder auszulesen, ist es sinnvoll, dans qui 1. Spalte avec BREITE=0, qui Datensatznummer (&dbRecNo) trop Sauver.
Salut Thomas Freier |
| | | | |
| | Peter Gückstock | allô Thomas,
je voudrais mich pour mon späte Antwort entschuldigen, mais j'étais betrieblich eingespannt et hatte pour meinen PC gar aucun Zeit plus.
vielen Dank pour Votre Aider, es funktioniert maintenant. mais maintenant habe je deux weitere Fragen: 1. comment peux on qui Schriftart et qui Zeichengröße beim Einlesen qui données aus qui banque de données dans qui Listbox verändern (zB. qui Schrift agrandir)? mon Versuche avec setfont étions ergebnislos. 2. peux on individuel Datensätzen dans qui Listbox différent Schriftfarbe zuordnen? (um z.B. zusammengehörige Datensätze de den anderen farblich trop unterscheiden)
mon Profanversion: 6.6
Salut Peter Gückstock |
| | | | |
| | Thomas Freier | allô Peter,
Schriftänderung pour Dialoge usw. seulement sur UseFont S,N1,N2,N3,N4,N5 Es peut seulement Farben pour qui Tabelle, pas pour une Spalte ou bien la ligne vorgegeben volonté (mon Kenntnisstand). Gruppendarstellung J'ai eu par Einsatz de Icônes getestet. qui doit oui pas qui de Profan comment im Beispiel son. Ist mais Geschmackssache. Um deine Wünsche umzusetzen, tu viens comment je pas um Franks LISTVIEW herum. Lohnt sich pour Einsteiger mais seulement ab XProfan 8.0 . qui Anpassung pour 6.6 ist pas so simple. alors SH-Xprofan 8/9 et Franks LISTVIEW ici besorgen et testen. là qui LISTVIEW Shareware ist, serait je aujourd'hui XProfan 10 testen, d.h., qui Aider Dossier ici besorgen et étudier, si qui Version alles cela quoi du realisieren veux sans Franks LISTVIEW peux.
Salut Thomas |
| | | | |
| | Thomas Freier | Nachtrag:
soll es chez Profan 6.6 rester et Gruppen par Icônes gekennzeichnet volonté, ici pour Iconen chercher ( Michael Wodrich ?) ou bien avec > Z-Icon.exe Tool peut vous pas seulement vorhandene Icon-Fichiers Travailler, >mais aussi Icônes aus Fichiers z.B. EXE, DLL et ICL auslesen, éditer..... beschaffen et im eigenen Programme qui Profan-Icon avec >P-Icon-Changer.exe (devrait ici pour trouver son) austauschen.
Salut Thomas |
| | | | |
| | Michael Wodrich | allô Thomas,
là la hâte Du wohl Votre HTML-Info dans un Notepad-la fenêtre zum Umkopieren gezogen... il y a aucun à gauche plus dans Deinem Text.
je hab aucun Icônes sur meiner HP. et quelque chose comme dans Datenbanken trop ermöglichen, là hilft qui ListView de Frank Abbing. aussi cela Einfärben qui Zeilen ist avec cela possible.
peux Dein Posting oui nochmal Travailler et qui à gauche hinzufügen. Über dem Editfenster den Globus avec dem Kettenglied benutzen...
belle Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 24.02.2007 ▲ |
| |
| | | Um à gauche trop posten doit cet simple seulement reinkopiert volonté - URLs volonté doch vollautomatisch dans à gauche konvertiert... |
| | | | |
| | Thomas Freier | allô Michael,
verwende eigentlich im Prinzip aucun à gauche. aussi sur den Vereinswebseiten, en Webmaster je suis, volonté im Gästebuch aucun à gauche zugelassen ou bien de mir abgeändert. Denke, avec cela peux on cela leidige Thema, justement ici seulement diskutiert, aus dem Weg aller. trop den Icônes : ici ou bien sous profan.de hatte einer une ZIP avec Iconen angeboten. qui? dans Gerhards Listview - pour Profan 6.6 - peux qui 1.Spalte un Icon zugeordnet volonté. Selbst verwendet . So comment Peter Gückstock es avant hat, Artikelgruppen deutlicher hervorzuheben, würden oui einfarbige Icônes reichen, qui il bien selbst avec IrfanView.exe ou bien qui Z-Icon.exe de : Andreas Baumann Softwareservice Flottenstr. 58 D-13407 Berlin erstellen peux. Webadresse im Programme pas benannt. Ursprung: 1999/2002. Irgendwo beim chercher pour Icon-Programmen qui Downloadadresse trouvé.
Salut Thomas |
| | | | |
| | Peter Gückstock | merci pour Eure Tipps. j'ai cela so gelöst: chacun Artikel qui Gleichen Gruppe bekommt im ersten champ qui banque de données qui gleiche Ziffer zugewiesen. Pour dem Einlesen dans qui Listbox et anschließendem Sortieren pour cette Spalte habe je zusammenhängende Blöcke conservé.
Salut Peter G. |
| | | | |
|
répondreOptions du sujet | 4.580 Views |
Themeninformationencet Thema hat 4 participant: |