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
qiLy4n

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

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

  Alt 1. Jun 2015, 16: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
 
#2

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

  Alt 1. Jun 2015, 16: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
 
#3

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

  Alt 1. Jun 2015, 17: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
 
#4

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

  Alt 1. Jun 2015, 19: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
 
#5

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

  Alt 2. Jun 2015, 16: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
 
#6

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

  Alt 2. Jun 2015, 16: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
 
#7

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

  Alt 2. Jun 2015, 16: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
Antwort Antwort

 

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 00:12 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