AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen
Thema durchsuchen
Ansicht
Themen-Optionen

Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

Ein Thema von qiLy4n · begonnen am 1. Jun 2015 · letzter Beitrag vom 6. Jun 2015
Antwort Antwort
Seite 1 von 2  1 2      
qiLy4n

Registriert seit: 1. Jun 2015
Ort: MV / Germany
22 Beiträge
 
FreePascal / Lazarus
 
#1

Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 1. Jun 2015, 17:14
Servus, um schnell zum Punkt zu kommen ->

Problem:
> Ich will einen sehr optionsreichen Einheiten-Umrechner erstellen.

> Da viele Einheiten zur Auswahl stehen, möchte ich den Benutzer in einer ListBox das Land, zu dem die entsprechende Einheit gehört, auswählen lassen und dadurch definieren, welche Einheiten in der zweiten ListBox aufgeführt sind (Bsp.: Deutschland > Bayerische Elle, Bamberger Elle,...); andersherum auch für die Zielmaße.

> Bisherige Ideen waren leider vergeblich. Momentan bringe ich alle Einheiten in eine Liste und würde später mit if ListBox1.Itemindex:=3 then Listbox2.Itemindex[x].Enabled/Disabled und/oder Visible:=true/false versuchen, die Einheiten-Liste durch die Länder-Liste angenehm anpassen zu lassen (ich bin mir absolut nicht sicher, ob das überhaupt zulässige Befehle sind). Zum einen ist das sehr viel Aufwand und zum anderen wird es, wie vorherige Versuche, wahrscheinlich auch nicht funktionieren.

> Mein Lehrer weiß leider auch nicht weiter und irgendwo muss man ein ja eigentlich so simples Programm ja auch selbst (oder zumindest nur mit Hilfe des Forums) programmieren können.

Danke bereits für Ideen
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#2

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 1. Jun 2015, 17:21
So etwas gibt es zuhauf, sogar mit mehr als zwei Kaskaden

Beispiel:
Auswahl Bundesland -> Auswahl Stadt -> Auswahl Straße

Du brauchst Nur mit dem Belegen der Optionen der zweiten Auswahlliste warten, bis ein Eintrag der ersten Lite gewählt wurde. Dann gehst Du Deine Daten durch und füllst die zweite Listbox.

Wird die Auswahl der ersten Box geändert, wird zuerst die zweite geleert und anschließend mit den relevanten Einträgen gefüllt.

Du brauchst Dir nur etwas Geeignetes für die Organisation der zugrundeliegenden Daten ausdenken.
  Mit Zitat antworten Zitat
qiLy4n

Registriert seit: 1. Jun 2015
Ort: MV / Germany
22 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 1. Jun 2015, 17:29
Danke für die schnelle Antwort.

Ja, das hatte ich auch schon ausprobiert, doch kenne weder ich (nach langem Googlen) noch mein Lehrer den Befehl, einer ListBoxItemIndex-Position etwas zuzuweisen (in diesem Fall eine Rechnung).
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#4

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 1. Jun 2015, 17:36
Danke für die schnelle Antwort.

Ja, das hatte ich auch schon ausprobiert, doch kenne weder ich (nach langem Googlen) noch mein Lehrer den Befehl, einer ListBoxItemIndex-Position etwas zuzuweisen (in diesem Fall eine Rechnung).
Einem ListBoxItem läst sich ein Pointer zuweisen, den man selbstverständlich auch auf eine Funktion zeigen lassen kann.

Das ist aber kein guter Stil!

Besser ist es die Rechnung in dem geeignet organisierten Datenbereich unterzubringen. Der Listbox-Eintrag enthält lediglich einen Wert, über den Du Dein geeignetes Datenobjekt wiederfindest.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 1. Jun 2015, 18:20
Was Mikkey sehr diplomatisch angedeutet hat, in die Listbox gehören keine Daten!
Sondern nur ihre Repräsentation!
Das zumindestens sollte auch deinem Lehrer klar sein!

Was eine Möglichkeit wäre:
Code:
Type
  tEinheitstyp=(Laenge,Flaeche,Volumen,Geschwindigkeit)
  tMyrec : record
             Land : String[20];
             Typ : tEinheitstyp
             EinheitsName:String[20];
             Formel: ... hier könnte zb. der Name einer Formel für die Berechnung aus/in eine Zwischengröße stehen z.B. Miles/h -> m/s
end;
Mit solchen Records könntest du ein Array oder eine Liste füllen. Ggf. erweiterst Du den Record noch um einen eindeutigen Identifier falls einzelne Records verwechselt werden könnten.

Mit Hilfe dieser Daten füllst Du dann deine Listboxen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 1. Jun 2015, 20:03
Mal auf die Schnelle dahingetippt um das Prinzip zu zeigen

(Source und EXE im Anhang)
Delphi-Quellcode:
unit Form.Main;

interface

uses
  System.Generics.Collections,

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TCountry = class
  private
    FCountryCode: Integer;
    FName: string;
  public
    constructor Create( const ACountryCode: Integer; const AName: string );
    property CountryCode: Integer read FCountryCode;
    property name: string read FName;
  end;

  TConverter = class
  private
    FCountryCode: Integer;
    FName: string;
  public
    constructor Create( const ACountryCode: Integer; const AName: string );
    property CountryCode: Integer read FCountryCode;
    property name: string read FName;
  end;

  TForm1 = class( TForm )
    ConverterListBox: TListBox;
    CountryComboBox: TComboBox;
    procedure CountryComboBoxChange( Sender: TObject );
    procedure ConverterListBoxClick( Sender: TObject );
  private
    FCountries: TList<TCountry>;
    FSelectedCountry: TCountry;
    FConverters: TList<TConverter>;
    FSelectedConverters: TList<TConverter>;
    FSelectedConverter: TConverter;

    procedure PopulateCountries;
    procedure PopulateSelectedConverters;
  public
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  EnumQuery;

{ TForm1 }

procedure TForm1.AfterConstruction;
begin
  inherited;
  FCountries := TObjectList<TCountry>.Create( );
  FCountries.Add( TCountry.Create( 1, 'Deutschland' ) );
  FCountries.Add( TCountry.Create( 2, 'USA' ) );

  FConverters := TObjectList<TConverter>.Create( );
  FConverters.Add( TConverter.Create( 1, 'Meter' ) );
  FConverters.Add( TConverter.Create( 1, 'Kilometer' ) );

  FConverters.Add( TConverter.Create( 2, 'Meilen' ) );
  FConverters.Add( TConverter.Create( 2, 'Inch' ) );

  FSelectedConverters := TList<TConverter>.Create( );

  PopulateCountries;
  PopulateSelectedConverters;
end;

procedure TForm1.BeforeDestruction;
begin
  inherited;
  FreeAndNil( FSelectedConverters );
  FreeAndNil( FConverters );
  FreeAndNil( FCountries );
end;

procedure TForm1.ConverterListBoxClick( Sender: TObject );
begin
  if ConverterListBox.ItemIndex < 0 then
    FSelectedConverter := nil
  else
    FSelectedConverter := FSelectedConverters[ ConverterListBox.ItemIndex ];
end;

procedure TForm1.CountryComboBoxChange( Sender: TObject );
var
  Item: TConverter;
begin
  if CountryComboBox.ItemIndex < 0 then
    FSelectedCountry := nil
  else
    FSelectedCountry := FCountries[ CountryComboBox.ItemIndex ];

  FSelectedConverter := nil;

  FSelectedConverters.Clear;
  FSelectedConverters.AddRange( TEnumQuery.SelectFrom<TConverter>( FConverters,
    function( AConverter: TConverter ): Boolean
    begin
      Result := Assigned( FSelectedCountry ) and ( AConverter.CountryCode = FSelectedCountry.CountryCode );
    end ) );
  PopulateSelectedConverters;
end;

procedure TForm1.PopulateCountries;
var
  Item: TCountry;
begin
  CountryComboBox.Items.BeginUpdate;
  try
    CountryComboBox.Items.Clear;
    for Item in FCountries do
    begin
      CountryComboBox.Items.Add( Item.name );
    end;

    CountryComboBox.ItemIndex := FCountries.IndexOf( FSelectedCountry );
  finally
    CountryComboBox.Items.EndUpdate;
  end;
end;

procedure TForm1.PopulateSelectedConverters;
var
  Item: TConverter;
begin
  ConverterListBox.Items.BeginUpdate;
  try
    ConverterListBox.Items.Clear;
    for Item in FSelectedConverters do
    begin
      ConverterListBox.Items.Add( Item.name );
    end;
    ConverterListBox.ItemIndex := FSelectedConverters.IndexOf( FSelectedConverter );
  finally
    ConverterListBox.Items.EndUpdate;
  end;
end;

{ TCountry }

constructor TCountry.Create( const ACountryCode: Integer; const AName: string );
begin
  inherited Create;
  FCountryCode := ACountryCode;
  FName := AName;
end;

{ TConverter }

constructor TConverter.Create( const ACountryCode: Integer; const AName: string );
begin
  inherited Create;
  FCountryCode := ACountryCode;
  FName := AName;
end;

end.
Angehängte Dateien
Dateityp: zip dp_185336.zip (878,7 KB, 6x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
qiLy4n

Registriert seit: 1. Jun 2015
Ort: MV / Germany
22 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 2. Jun 2015, 17:33
Danke für die Hilfe.

Sorry, ich kenne absolut keinen der Befehle, hab aber das Grundprinzip verstanden und erkannt.

Ich werd in der Schule gucken, ob meine Methode irgendwie funktioniert. Ansonsten muss ich wohl diesen Code kopieren. Wenn ich ihn bis dahin völlig durchschaut habe, brauch ich vllt doch kein so schlechtes Gewissen zu haben
  Mit Zitat antworten Zitat
qiLy4n

Registriert seit: 1. Jun 2015
Ort: MV / Germany
22 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 2. Jun 2015, 17:37
Übrigens: Nein, leider ist meinem Lehrer so etwas nicht klar. Sonst hätte er uns sicherlich auch etwas mehr beibringen bzw erklären können oder gleich auf unsere Idee entsprechend reagiert...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 2. Jun 2015, 17:47
Ich glaube sowieso mittlerweile dass jeder der mal einen 3-tägigen Anfängerkurs im Programmieren in der VHS absolviert hat Informatiklehrer werden kann.
90% aller Informatiklehrer die ich hatte (sowohl in der Oberstufe als auch in meiner Ausbildung) oder von denen ich gehört habe scheinen tatsächlich nicht mehr zu können bzw. haben oft sogar weniger Ahnung von was sie reden als ihre Schüler

Ich kann nur hoffen dass sich das irgendwann mit den zukünftigen Generationen ändern wird und vor allem, dass die Lehrer anderer Fachbereiche kompetenter sind
(was nicht so einfach zu beurteilen ist wenn man von dem Fachbereich nicht schon vorher Ahnung hatte...)
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
qiLy4n

Registriert seit: 1. Jun 2015
Ort: MV / Germany
22 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Durch ListBox1-Auswahl ListBox2-Auswahlmöglichkeiten festlegen

  Alt 6. Jun 2015, 11:36
Hi und danke nochmal für die Antworten.

Habe es letztendlich doch durch weiteres Suchen herausgefunden, wie ich das Problem mit meinem 'Können' beheben kann.

Code:
case ComboBox1.ItemIndex of
      0: begin
         ComboBox3.Items.Clear;
         ComboBox3.Items.Add('m');
         ComboBox3.Items.Add('km');
         end;

      1: begin
         ComboBox3.Items.Clear;
         ComboBox3.Items.Add('x');
         ComboBox3.Items.Add('y');
         end;
Eigentlich simple af.

Thread kann geschlossen werden

Geändert von qiLy4n ( 6. Jun 2015 um 11:41 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz