Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi listbox und fensterwechsel (https://www.delphipraxis.net/86184-listbox-und-fensterwechsel.html)

JannyR 10. Feb 2007 15:51


listbox und fensterwechsel
 
Moin,

hab mit Delphi 2005 schon nen kleines Tool gebastelt (DL).

Das Design ist aber nicht wirklich gelungen jetzt will ich das ganze in ein Design umändern was ungfähr so aussehen soll:

http://www.250kb.de/u/070210/j/4a3739a4.jpg

Und zwar soll wenn jemand auf einen Eintrag in der listbox klickt sich jedesmal das bild und der Text ändern. Das gleiche mit dem mainmenü, da soll denn eine neue listbox erscheinen mit anderen Einträgen.

Für Hilfe wäre ich dankbar.

marabu 10. Feb 2007 17:23

Re: listbox und fensterwechsel
 
Herzlich willkommen in der Delphi-PRAXiS, JannyR.

Den Code zum Auswechseln von Text und Bild kannst du an das Ereignis OnChange der ListBox hängen. Eine neue ListBox brauchst du nicht, wenn die Menüeinträge angeklickt werden. Es genügt, wenn du die alten Items der ListBox löschst und die neuen hinzufügst.

Freundliche Grüße vom marabu

JannyR 10. Feb 2007 17:57

Re: listbox und fensterwechsel
 
Erstmal danke für die Anrwort.

Habe da das eine oder andere Problem.

Bei TListBox habe ich kein OnChange.
Und wenn ichs hätte wüsste ich nicht was ich eingeben müsste^^.

Also um das Bild zu wechseln denk ich mal brauch ich ein TImage und TImageList, was aber für den Text (mach ich mit TLabel)?


Und mit dem Menü mach ich meist so dass ich form,showmodal; mache, aber ich will dass es im selben Fenster öffnet und nicht seperat öffnet.

DGL-luke 10. Feb 2007 18:00

Re: listbox und fensterwechsel
 
@marabu: Du meinst OnClick :)

Den Text kannst du mit TLabel machen, indem du AutoSize auf false und Wordwarap auf true stellst.

JannyR 10. Feb 2007 18:07

Re: listbox und fensterwechsel
 
Zitat:

Zitat von DGL-luke
Den Text kannst du mit TLabel machen, indem du AutoSize auf false und Wordwarap auf true stellst.


Ahh das war schonmal sehr hilfreich! Ich hab sonst immer für jede Zeile ein extra TLabel gemacht.


Jetzt wäre es noch super wenn mir jmd mit der Wechselsache helfen könnte.

Nils_13 10. Feb 2007 18:13

Re: listbox und fensterwechsel
 
Hi,

du kannst je nach Delphi-Version übrigens neben Caption bei einem Label auf ... klicken, dann kannst du auch ganz leicht Zeilenumbruche einbauen.

DGL-luke 10. Feb 2007 18:17

Re: listbox und fensterwechsel
 
Delphi-Quellcode:
type
  TDataRecord = record
    Image: string;
    Text: string;
  end;

var
  Data: array of TDataRecord;

procedure TForm1.Listbox1CLick(Sender: TObject);
begin
  if Listbox1.ItemIndex > -1 then //wenn nichts ausgewählt ist, kannst du nicht laden
  begin
    Image1.Bitmap.LoadFromFile(Data[Listbox1.ItemIndex].Image);
    Label1.Caption := Data[Listbox1.ItemIndex].Text;
  end;
end;
Dabei ist jetzt noch nicht eingerechnet, dass du ja zusätzlich noch ein Menü haben willst.

JannyR 10. Feb 2007 18:39

Re: listbox und fensterwechsel
 
Code:
[Fehler] test.pas(33): E2029 Anweisung erwartet, aber 'TYPE' gefunden
[Fehler] test.pas(42): E2029 ';' erwartet, aber '.' gefunden
[Fehler] test.pas(44): E2003 Undefinierter Bezeichner: 'Listbox1'
[Fehler] test.pas(46): E2003 Undefinierter Bezeichner: 'Image1'
[Fehler] test.pas(46): E2003 Undefinierter Bezeichner: 'LoadFromFile'
[Fehler] test.pas(46): E2029 ']' erwartet, aber Bezeichner 'ItemIndex' gefunden
[Fehler] test.pas(49): E2029 '.' erwartet, aber ';' gefunden
[Warnung] test.pas(50): W1011 Text hinter dem abschließenden 'END.' wird vom Compiler ignoriert
[Fataler Fehler] Project2.dpr(5): F2063 Verwendete Unit 'test.pas' kann nicht compiliert werden
Wäre nett wenn du es mir ein bissl genauer erklären könntest^^

DGL-luke 10. Feb 2007 18:47

Re: listbox und fensterwechsel
 
OK.

der Absatz nach "type" ist eine typendeklaration. Ich deklariere da ein Delphi-Referenz durchsuchenrecord, das aus zwei strings besteht.
Das ganze muss in den interface-abschnitt deiner delphi-unit - am besten nach das type, hinter dem deine Form deklariert wird ("type TForm1= ....").

das hinter dem var, eine array, das heißt aneinanderrehiung vieler records, sollte am besten dahin, wo bei deiner form-deklaration "Private-deklarationen" steht.
irgendwo musst du den array (und die listbox) auch füllen - z.B. mit Ini-Dateien (Delphi-Referenz durchsuchenTIniFile). dafür wirst du die FUnktion Delphi-Referenz durchsuchenSetLength brauchen.

Das letzte, die procedure, ist das Event - einfach in den formdesigner gehen, die listbox anklicken, im Objektinspektor (F11) auf "Ereignisse" und in das feld hinter "OnClick" doppelklicken. dann den code einfüllen.

das sollts gewesen sein... und wie gesagt, für "mehrere listboxen" musst du das ganze noch einmal "verpacken" (z.B. in dem du aus dem array of TDaten ein array of array of TDaten machst).

JannyR 10. Feb 2007 19:05

Re: listbox und fensterwechsel
 
Ziemlich viel Input^^

Könntest du mir bitte ein kleines Beispiel-Projekt schicken?
2 oder 3 Eintäge müssten reichen.

DGL-luke 10. Feb 2007 21:39

Re: listbox und fensterwechsel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Da isses.

JannyR 10. Feb 2007 21:55

Re: listbox und fensterwechsel
 
Erstmal großes DANKE!

Aber wenn ich das Projekt öffne kommt folgende Meldung:

http://www.250kb.de/u/070210/j/1f1ef6db.jpg

xZise 10. Feb 2007 22:12

Re: listbox und fensterwechsel
 
"Alle Ignorieren" klicken ;) Die eigenschaft ist eigentlich nicht überlebenswichtig (Also bei meinem Projekten funzts dannach ganauso gut)

JannyR 10. Feb 2007 22:18

Re: listbox und fensterwechsel
 
Leider gehts nicht wenn ich auf ignorieren klcke. kommt immer folgende meldung:

http://www.250kb.de/u/070210/j/t/ba571584.jpg

DGL-luke 10. Feb 2007 22:25

Re: listbox und fensterwechsel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mist, das ist alter Code :wall:

Einfach den angehängten stattdessen nehmen!

EDIT: Würd aber auch reichen, einfach GraphicEx und PNGImage rauszunehmen und stattdessen JPEG einzufügen.

Im angehängten Code ist aus Gründen der Dateigröße die SysUtils-Unit rausgenommen und damit auch zwei Codestellen etwas unsicherer geworden (Einfach mal vergleichen ;-)).

JannyR 10. Feb 2007 23:00

Re: listbox und fensterwechsel
 
Hab noch nen paar Fragen:wink: :

1. Wie kann ich den Text formatieren? Mit Absatz und Fett etc damit das später so ähnlich aussieht:
http://www.250kb.de/u/070210/j/d565a4b7.jpg

2. Wie ändere ich oben die Bezeichnungen 0-2?

3. Wie mache ich dass er bei der 0 startet?

bitsetter 10. Feb 2007 23:32

Re: listbox und fensterwechsel
 
Über Font kannst du die Schrift ändern.
Delphi-Quellcode:
label1.Font.Style:= [fsBold];

JannyR 10. Feb 2007 23:43

Re: listbox und fensterwechsel
 
Wie man die Schrift etc für das ganze label ändert weiß ich, aber ich habe nur ein label zur verfügung in der ich den text verschieden formatieren will.

bitsetter 10. Feb 2007 23:55

Re: listbox und fensterwechsel
 
Für den Formatierten Text kannt du ja z.B. ein TMemo nehmen.
Delphi-Quellcode:
  Memo1.BorderStyle:= bsNone;
  Memo1.Color:= Color;
  Memo1.Text:= 'Der Devil Yedi....';
und für "Beschreibung:", "Angriff:" usw. ebend Labels. Ansonsten kannst du dir ja noch die Komponente RichEdit ansehen, fallst du noch farbigen Text haben willst.

JannyR 11. Feb 2007 00:00

Re: listbox und fensterwechsel
 
Ich hab ja nur ein Label zur Verfügung. DGL-luke ein mir nen Beispiel Projekt gemacht und darin ist für den Text nur 1 Label da. Und eich weiß nicht wie ich ein weiteres Label mit einbinden kann.

bitsetter 11. Feb 2007 00:04

Re: listbox und fensterwechsel
 
Du must in die Tool-Pallete auf TLabel klicken und dann auf die Form setzen, genauso mit TMemo.

JannyR 11. Feb 2007 00:20

Re: listbox und fensterwechsel
 
Wie man ein Objekt erstellt weiß ich...

Aber wie es mit eingebunden wird halt nicht, les dir mal den rest des Threads durch. Ich glaube du weißt nicht genau worum es geht...

Sharky 11. Feb 2007 08:15

Re: listbox und fensterwechsel
 
Hai JannyR,

sei doch bitte so nett und hänge Bilder als Anhang an dein Posting. Zum einen kann es für Modem Benutzer recht lange dauern bis eine Seite geladen wird und zum anderen sind die Bilder auch dann noch vorhanden wenn sie nicht mehr auf dem von Dir verwendeten WEB-Space liegen.

Danke :-D

xZise 11. Feb 2007 09:32

Re: listbox und fensterwechsel
 
Zitat:

Zitat von JannyR
Wie man die Schrift etc für das ganze label ändert weiß ich, aber ich habe nur ein label zur verfügung in der ich den text verschieden formatieren will.

Also ich würde dir den Tipp geben, verschiedene Labels zu nehmen.

Ich hätte es folgenermasen gemacht (Wenn du etwas nicht verstehst nachfragen!):
Zuerst hast du ein array-record in dem die Daten stehen:
Delphi-Quellcode:
type
  TData = record
    description, attack, quests : string;
    hitPoints : Integer;
  end;
Und dann kannst du in ein array schreiben:
Delphi-Quellcode:
private
  datas : array of TData;
Nun muss du dass array mit Daten füllen. Wenn du das gemacht hast, dann kannst du in der Listbox das OnClick nehmen, und dann entsprechend die Labels auffüllen.
Und zu wissen, welches Item des Array man nehmen muss, kannst du die Eigenschaft "ItemIndex" verwenden, welches dir das angeklickte Item verrät (bei 0 beginnend und -1 ist keine selektion)!

Dies ist noch ohne Bild, aber ich denke, dass sollte jetzt nicht mehr so schwierig sein ...

Ich habe noch eine Frage: Wie sind eigentlich die Daten gespeichert? In einer ini Datei o.s.ä.?

Übrigens wirst du mit einem TLabel nicht weit mit verschiedenen Formatierungen kommen.

Wenn du möchstest, kann ich dir mal eine Demo anhängen!

JannyR 11. Feb 2007 11:42

Re: listbox und fensterwechsel
 
Also die Bilder sind im res Ordner gespeichert und Texte sind direkt im Code geschrieben.
Für ein weiteres Beispiel wäre ich sehr dankbar.

DGL-luke 11. Feb 2007 12:01

Re: listbox und fensterwechsel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab das Quick&Dirty in 30 Minuten gemacht. Es gibt aber die sehr einfache Möglichkeit, anstelle des TLabels eine Komponente reinzupacken, die RichTextFormat bzw. HTML versteht.

Für Richtext gibts das "TRichEdit", das bei Delphi mitgeliefert wird.

Ich habs dir nochmal angehängt, einfach über das alte drüberschreiben(die dfm und die pas ersetzen, das rtf zusätzlich in den Ordner).

@xZise: Nix da Demo, Demo ich! :zwinker:

PS: Hier mal die "Datenbank" xD:

Delphi-Quellcode:
 
var
  Form2: TForm2;
const
  entries: array[0..2] of array[0..2] of array[0..2] of string =
  ((
    ('Bild1', '1.rtf', '1.jpg'),
    ('Bild2', '1.rtf', '1_reduced_faceonly_3cols.jpg'),
    ('Bild3', '1.rtf', '1_cropped.jpg')
  ),
  (
    ('Bild4','1.rtf','1_reduced_faceonly_3cols_2_small.jpg'),
    ('Bild5','1.rtf','1_reduced_faceonly_3cols_172.bmp'),
    ('Bild6','1.rtf','1_reduced.jpg')
  ),
  (
    ('Bild1', '1.rtf', '1.jpg'),
    ('Bild2', '1.rtf', '1_reduced_faceonly_3cols.jpg'),
    ('Bild3', '1.rtf', '1_cropped.jpg')
  ));

xZise 11. Feb 2007 12:35

Re: listbox und fensterwechsel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DGL-luke
@xZise: Nix da Demo, Demo ich! :zwinker:

Hehe ^^ Ich habs ohne irgendein Richedit geschaft :P

Anhang ist eine Beispieldemo :P (auch für Luke ggf. interessant xD)

JannyR 11. Feb 2007 13:07

Re: listbox und fensterwechsel
 
Vielen Dank DGL-luke! Das ist genau das was ich brauche!

Aber ich hab wie immer noch nen paar Fragen, und zwar:


1. Wie kann ich die Einträge im Menü ändern? (0,1,2)

2. Ist es möglich den res Ordner später irgendwie in einer Datei zu verpacken, damit nicht jeder einfach die Dateien im Ordner anguckt?

Sharky 11. Feb 2007 16:28

Re: listbox und fensterwechsel
 
Zitat:

Zitat von JannyR
...
Aber ich hab wie immer noch nen paar Fragen, und zwar:
...

Hai JannyR,

bitte mache, so wie es in unseren "Regeln" steht, für jede Frage einen eingenen Thread auf. Danke.

Da Deine ursrpüngliche Frage wohl beantwortet ist mache ich diesen Thread mal zu.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz