Einsteigerfragen zur PROFAN Programmierung

| Suchen
| Zurück zur Übersicht

Autor | Thema: Listbox
Frank Thomas
| Datum:30.08.02 16:26 |
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 (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 |
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 (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 |
Hallo Gerhard, klappt wunderbar, danke Dir. Frank Thomas

| Zurück zur Übersicht

| Ein kostenloses WebMart Forum WebMart Homepage Tools kostenlos |