Einsteigerfragen zur PROFAN Programmierung
  Suchen
 Zurück zur Übersicht
 AutorThema: Listbox
Frank Thomas
Datum:30.08.02 16:26 Antwortenals Email verschicken  


Hallo Profaner,
Ich habe ein Problem mit meiner Listbox. Wen ich eine LB1 anklick, geht es zu Proc LB1 und wen ich LB2 anklick, gehts zur Proc LB2.
Nur danach ist schluß lit Lustig, kann mir da mal jemand ein Tip geben.
Hier der Quellcode:

Window 50,50-300,300
declare ende%,LB_1%,LB_2%

Let LB_1%=@CreateListBox(%HWnd,"",25,10,250,90)
@AddString(LB_1%,"Unter 1")
@AddString(LB_1%,"Unter 2")
Let LB_2%=@CreateListBox(%HWnd,"",25,120,250,90)
ClearList
@AddString(LB_2%,"Links 1")
@AddString(LB_2%,"Links 2")

Proc LB1
Let LB_1%=@CreateListBox(%HWnd,"",25,10,250,90)
@AddString(LB_1%,"Unter 3")
@AddString(LB_1%,"Unter 4")
@MessageBox ("ListBox 1","Klick",0)
EndProc

Proc LB2
Let LB_2%=@CreateListBox(%HWnd,"",25,120,250,90)
@AddString(LB_2%,"Unter 3")
@AddString(LB_2%,"Unter 4")
@MessageBox ("ListBox 2","Klick",0)
EndProc

Let ende%=0
WhileNot ende%
WaitInput
If @GetFocus(LB_1%)
LB1

ElseIf @GetFocus(LB_2%)
LB2
EndIf
EndWhile
End

Gruß Frank Thomas


Dietmar Horn
Datum:30.08.02 17:47 Antwortenals Email verschicken (MMJ-Hoyerswerda@gmx.de) 


Hallo Frank,

Dein Problem ist leicht zu lösen.

Du erzeugst zunächst zwei Listboxen und speicherst deren Handles in LB_1% und LB_2%. Bei jedem Aufruf deiner Prozeduren PROC LB1 und PROC LB2 überschreibst Du durch ... = @CreateListbox... die Handles, d.h. die ursprünglich vergebenen Handles werden ungültig und durch neue ersetzt.

Lösung: Lasse einfach in beiden Prozeduren die Zeilen mit @CreateListbox weg, und Dein Programm funktioniert.

MfG
Dietmar



Frank Thomas
Datum:31.08.02 07:12 Antwortenals Email verschicken  


Hallo Dietmar,
das geht, aber wie kann man dann die ListBox leeren mit ClearList ?
Dann habe ich ja kein bezug mehr zur ListBox wen Ich den Inhalt vorher löschen möchte.

Gruß
Frank


Gerhard Putschalka
Datum:31.08.02 10:50 Antwortenals Email verschicken (g.putschalka@utanet.at) 


Hallo Frank,
mit Clearlist kannst Du nur die Listboxliste löschen. Verwechsle nicht die Listboxliste
mit der Liste der Listbox die Du mit @CreateListBox erstellst!
Soweit ich weiß kann man diese Liste nur mit @SendMessage löschen.
Clearlist bewirkt hier nichts, außerdem hast Du hier ja 2 getrennte Listen.
In @SendMessage ist der 2. Parameter $0184 und gilt für die 32-Bit Version (ab Windows 95).
Solltest Du die 16-Bit Windowsversion haben (ich nehme an das ist Windows < Version 95)
dann mußt Du $0184 mit $0405 ersetzen.
Ich habe Dein Programm etwas umorganisiert. Ich persönlich finde, daß der Code
des Hauptprogrammes, wenn es geht, in einem Block ist und nicht durch Prozeduren
unterbrochen wird. Ist aber nur ein Vorschlag.
Viel Erfolg.
Gerhard.

declare ende%,LB_1%,LB_2%
Proc LB1
'Let LB_1%=@CreateListBox(%HWnd,"",25,10,250,90) ' ist hier falsch
@SendMessage(LB_1%,$0184,0,0)  ' ClearList
@AddString(LB_1%,"Unter 3")
@AddString(LB_1%,"Unter 4")
@MessageBox ("ListBox 1","Klick",0)
EndProc

Proc LB2
'Let LB_2%=@CreateListBox(%HWnd,"",25,120,250,90) ' ist hier falsch
@SendMessage(LB_2%,$0184,0,0)  ' ClearList
@AddString(LB_2%,"Unter 3")
@AddString(LB_2%,"Unter 4")
@MessageBox ("ListBox 2","Klick",0)
EndProc

' =============
' Programmstart
' =============
Window 50,50-300,300
Let LB_1%=@CreateListBox(%HWnd,"",25,10,250,90)
@AddString(LB_1%,"Unter 1")
@AddString(LB_1%,"Unter 2")
Let LB_2%=@CreateListBox(%HWnd,"",25,120,250,90)
' ClearList  ' bewirkt in diesem Programm nichts
@AddString(LB_2%,"Links 1")
@AddString(LB_2%,"Links 2")
Let ende%=0
WhileNot ende%
   WaitInput
   If @GetFocus(LB_1%)
      LB1
   ElseIf @GetFocus(LB_2%)
      LB2
   EndIf
EndWhile
End



Frank Thomas
Datum: 31.08.02 12:30 Antwortenals Email verschicken  


Hallo Gerhard,
klappt wunderbar, danke Dir.

Frank Thomas


 Zurück zur Übersicht
 

 Ein kostenloses WebMart Forum
WebMart Homepage Tools kostenlos
doteu.info: Don´t miss your .eu-Domain