05. april 2004 - 20:36Der er
13 kommentarer og 1 løsning
Memo box og ListBox arbejde sammen?
hey!
jeg vil gerne have lavet min Form sådan at jeg har en memo box med tekst som skal variere efter hvilken punkt(linie) man vælger i ListBox'en som skal være ved siden af memo'en.. kan det lade sig gøre?? evt. ved at den henter forskellige tekster fra txt filer eller ??
type TForm1 = class(TForm) Memo1: TMemo; ListBox1: TListBox; procedure ListBox1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private Texts : TStringList; function GetText(idx : integer) : string; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ListBox1Click(Sender: TObject); begin Memo1.Lines.Text := GetText(ListBox1.ItemIndex); end;
procedure TForm1.FormCreate(Sender: TObject); begin Texts := TStringList.Create; Texts.LoadFromFile('d:\tmp\tekster.txt'); end;
procedure TForm1.FormDestroy(Sender: TObject); begin Texts.Free; end;
function TForm1.GetText(idx: integer): string; var i : integer; begin i := Texts.IndexOf('@@' + IntToStr(idx)); if i >= 0 then begin Inc(i); Result := ''; while (i < Texts.Count) and (Copy(Texts[i],1,2) <> '@@') do begin if Result <> '' then Result := Result + #10; Result := Result + Texts[i]; Inc(i); end; end else Result := 'Ingen oplysninger'; end;
end.
Din tekst fil skal så se sådan ud:
@@0 nummer 0 nummer 0 @@1 nummer 1 nummer 1 @@2 nummer 2 nummer 2 @@ nummer 3 nummer 3
oki tak virker perfekt!!!! MEN hva så hvis jeg gerne vil have en knap der hedder "Frem" og en der hedder "Tilbage"?? så er det vel noget med at flytte ItemIndex en frem og en tilbage??
Jeg havde valgt @@ fordi man nok aldrig ville bruge dem ;-) Men du kan vælge hvad somhelst...
Du kan lave en frem knap på denne måde:
procedure TForm1.Button1Click(Sender: TObject); begin with ListBox1 do begin if ItemIndex < Items.Count - 1 then begin ItemIndex := ItemIndex + 1; ListBox1.OnClick(ListBox1); end; end; end;
ListBox1.OnClick(..) er nødvendig, da dit OnClick event IKKE kaldes når du sætter ItemIndex direkte.
okey knappen "frem" virker men knappen "tilbage" har jeg lavet således:
procedure TForm2.Image3Click(Sender: TObject); begin with ListBox1 do begin if ItemIndex < Items.Count then begin ItemIndex := ItemIndex - 1; ListBox1.OnClick(ListBox1); end; end; end;
Problemet er bare at når man står på den øverste i listboxen kan man trykke en mere tilbage så der ikke er nogen markeret i listboxen hvor den så viser "Ingen oplysninger" i memo'en ???
lige et sidste spørgsmål... kan det lade sig gøre at få en label's Caption til at have den samme tekst som et punkt der er markeret i ListBoxen? altså så den ændre sig når man trykker på de forskellige punkter?? (behøves ik lige være den tekst men bare så den ændre sig når man trykker rundt i listboxen?) det er vel det samme princip som før med en txt fil og så bare i stedet for at sætte detind i memo'en så bare i label1.Caption eller hva??
Og ja, det er samme princip mht. til en label. Det kunne måske være smart at skrive den tekst, der skal stå i din label efter @@nn - altså f.eks. @@1 Overskrift 1.
Så kan du bare ikke bruge indexof(..), men er nød til at lede Texts igennem sekventielt... Så der er lidt at hygge sig med ;-)
nu siger du jeg ik skal bruge indexof(..) men hvis jeg gør sådan her i funktionen:
function TForm2.GetLabels(idx: integer): string; var k : integer; begin k := Labels.IndexOf('@@' + IntToStr(idx)); if k >= 0 then begin Inc(k); Result := ''; while (k < Labels.Count) and (Copy(Labels[k],1,2) <> '@@') do begin if Result <> '' then Result := Result + #10; Result := Result + Labels[k]; Inc(k); end; end else Result := 'Ingen oplysninger'; end;
så virker det fint!! kunne det gøres anderledes?? i tekstfilen er det sadt op på sammen måde som før!!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.