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/)
-   -   Panel (https://www.delphipraxis.net/136297-panel.html)

Kunoishi 27. Jun 2009 16:10


Panel
 
ich versuche derzeit durch verschiedene Schlagwörter in einem Editfeld verschiedene Panels zu öffnen.
komme aber nicht so recht vorran weil ich den anfang nicht so hinbekomme.
hat für mich jemand einen rat.

Florian Hämmerle 27. Jun 2009 16:16

Re: Panel
 
Genauere Beschreibung würd vielleicht helfen!

Kunoishi 27. Jun 2009 16:22

Re: Panel
 
os sorry
jups, im edit feld soll beispielsweise blume eingegeben werden und es soll das erkennen und ein Panel aufmachen.
das gleiche für eingabe bei tieger hier nur dann das Panel2 aufmachen.
bei eingabe von luft ist halt kein panel offen.
jedoch bei eingabe von wasser dann das panel3

ich hoffe jetzt ist die beschreibung besser

fkerber 27. Jun 2009 16:44

Re: Panel
 
Hi!

Wäre dann nicht vllt. eine ComboBox mit den möglichen "Eingaben" sinnvoller?


Grüße, Frederic

Kunoishi 27. Jun 2009 16:50

Re: Panel
 
da ich haber mehrere Artikelsorten habe wird die Combo warscheinlich zu lang :-(

Jens Hartmann 27. Jun 2009 16:51

Re: Panel
 
Hallo,

vieleicht hilft dir ja folgendes..

Delphi-Quellcode:

if Edit1.text = 'Blume' then
  Panel1.Visible := true
else
  Panel1.Visible := false;
Die IF/Else Anweisung musst du dir anpassen wie du es brauchst. Du könntest auch mal nach Case und so schauen. Und wenn Du feste Werte hast, wie 'Blume', 'Tiger' etc. solltest Du mal das mit der ComboBox bedenken.

Ich hoffe es hilft Dir.

Gruß Jens

fkerber 27. Jun 2009 16:55

Re: Panel
 
Hi!

Dann solltest du dir überlegen, vllt. besser zu strukturieren - also z.B. Warengruppen - dafür dann eine CB und dann für den jeweiligen Inhalt wieder eine.
Weil ein solches IF-Konstrukt wird auch ziemlich lang....


Grüße, Frederic

DeddyH 27. Jun 2009 16:55

Re: Panel
 
Zitat:

Zitat von Jens Hartmann
Delphi-Quellcode:

if Edit1.text = 'Blume' then
  Panel1.Visible := true
else
  Panel1.Visible := false;

Vielleicht besser so:
Delphi-Quellcode:
Panel1.Visible := AnsiLowerCase(Edit1.text) = 'blume';
Aber die ComboBox wäre auch in meinen Augen die geeignetere Variante, die o.a. Lösung ist nicht sonderlich fehlertolerant.

Helmi 27. Jun 2009 16:57

Re: Panel
 
Hallo,

warum nicht einfach so:

Delphi-Quellcode:
var
  S: String;

begin
  //Text auslesen und Kleinbuchstaben daraus machen
  S := lowercase(Edit1.Text);

  Panel1.Visible := S = 'blume';
  Panel2.Visible := S = 'tiger';
  Panel3.Visible := S = 'wasser';
end;
Der Vorteil dabei von lowercase ist, dass man nicht auf die Groß-/Kleinschreibung bei der Eingabe achten muss.

DeddyH 27. Jun 2009 16:59

Re: Panel
 
Zitat:

Zitat von Helmi
Der Vorteil dabei von lowercase ist, dass man nicht auf die Groß-/Kleinschreibung bei der Eingabe achten muss.

Und bei AnsiLowercase gilt das sogar für Umlaute :zwinker:

polarwolf 27. Jun 2009 17:01

Re: Panel
 
Ups ich hab das alles auf integern gemacht damals. aber jetzt sollte es richtig sein

Ich verwalte in der selben Art ein DB Programm von mir. Vieleicht hilft es dir ja weiter.

Delphi-Quellcode:
function TForm1.Panelanzeige(Neuepanel: string):boolean;
begin

  //Das gewünschte Panel anzeigen
  Case Neuepanel of
    'blume': blumepanel.Visible:=true;
    'luft': luftpanel.Visible:=true;
    'wasser': wasserpanel.Visible:=true;
  else
    showmessage('Programmfehler Panel NR '+inttostr(Neuepanelnummer)+' nicht verfügbar.');
    result:=false;
  end;

  //Alle anderen Panel ausschalten
  if Neuepanel <> 'blume' then blumepanel.Visible:=false;
  if Neuepanel <> 'luft' then luftpanel.Visible:=false;
  if Neuepanel <> 'wasser' then wasserpanel.Visible:=false;

  application.ProcessMessages;
  result:=true;
end;

aufgerufen wird es dann so

Delphi-Quellcode:
Panelanzeige(Edit1.text);

DeddyH 27. Jun 2009 17:02

Re: Panel
 
Case mit String? Ich möchte bezweifeln, dass das so geht.

[edit] Das wird immer noch nicht gehen, case funktioniert nur mit ordinalen Datentypen :mrgreen: [/edit]

Jens Hartmann 27. Jun 2009 17:05

Re: Panel
 
Die Frage, wäre ja auch was er genau damit bezwecken will. Oder besser gesagt, was es geben soll. Eventuell das ganze über eine DB zu lösen. Je nachdem wie viel Artikel etc. vorhanden sind.

Gruß Jens

polarwolf 27. Jun 2009 17:05

Re: Panel
 
ich habe das wir gesagt damals mit integern gemacht. ob es nun mit strings geht habe ich nimals ausprobiert.

Helmi 27. Jun 2009 17:07

Re: Panel
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von Helmi
Der Vorteil dabei von lowercase ist, dass man nicht auf die Groß-/Kleinschreibung bei der Eingabe achten muss.

Und bei AnsiLowercase gilt das sogar für Umlaute :zwinker:

Auch wenns OT ist, ich hab das gerade mal ausprobiert, mit folgenden Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  S = 'Das ist ein Text mit üöäßÄÜÖ';

begin
  Label1.Caption := LowerCase(S);
  Label2.Caption := AnsiLowerCase(S);
end;
Im Label1 ist alles klein bis auf die letzten drei zeichen, im zweiten Label alles klein.
Ist das der Grund für AnsilowerCase?

DeddyH 27. Jun 2009 17:15

Re: Panel
 
Japp, das hatte ich gemeint.

polarwolf 27. Jun 2009 17:18

Re: Panel
 
man kann ja auch den string wieder in zahlen umschreiben dann geht es ;)

Helmi 27. Jun 2009 17:24

Re: Panel
 
Danke Deddy!

Für Case und String haben die Schweizer ein paar Beispiele:

Beispiel 1

Beispiel 2

Medium 27. Jun 2009 17:28

Re: Panel
 
@polarwolf: Mann kann sich auch nen Bein ausreissen und damit golfen. Schmerz und Sinn sind vergleichbar.

Nimm dir ne Combobox, und schmeiss da deine Texte rein. Die sind dann intern als StringList hinterlegt, die u.a. auch die Property Objects hat. Zum Programmstart schmeissz du dir in diese die jeweiligen Referenzen auf die zugehörigen Panels, und dann kannst du nachdem ein Eintrag gewählt wurde einfach über den ItemIndex wieder auf genau das richtige zugreifen und es visible machen. Kein if-Gewürgel, keine Stringveralberung, nur ein mal im OnCreate haufen an Panels in die Objects-Property werfen und fertig.

Btw: ComboBoxen können auto-vervollständigen, so dass der User nichtmals ausklappen muss um einen Eintrag zu wählen. Das ganze ist ja relativ Edit-ähnlich zu bedienen dann.

DeddyH 27. Jun 2009 17:36

Re: Panel
 
:lol:, die selbe Idee hatte ich auch gerade:
Delphi-Quellcode:
procedure TfrmMain.ComboBox1Change(Sender: TObject);
var i: integer;
begin
  for i := 0 to ComboBox1.Items.Count - 1 do
    (ComboBox1.Items.Objects[i] as TPanel).Visible := i = ComboBox1.ItemIndex;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.AddObject('Blume',Panel1);
  ComboBox1.Items.AddObject('Tiger',Panel2);
  ComboBox1.Items.AddObject('Pinkelpott',Panel3);
  ComboBox1.ItemIndex := 0;
  ComboBox1Change(Sender);
end;

DP-Maintenance 27. Jun 2009 17:36

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Geht um Delphi

Kunoishi 27. Jun 2009 17:44

Re: Panel
 
ups mit so einer resonanz habe ich nicht gerechnet.

also ich habe eine Artikeldatenbank die ich hiner eine dat-datei speicher.

Abteilung 100, Hose, 1x, Preis 15.00,
jetzt wollte ich die datenbank erweitern

Abteilung 100, Hose, farbe rot, größe 31/32 ,1x Preis 15.00

die zusätzichen angaben wollte ich in einem Panel bei bedarf einblenden lassen.

Medium 27. Jun 2009 17:45

Re: Panel
 
@DeddyH: Schöne Methode für die Visibility! So elegant hatte ich sie grad nicht im Kopf :)

polarwolf 27. Jun 2009 17:47

Re: Panel
 
Naja ich benutze meinen Quelltext auch ein wenig anders. Benutze nur den aufruf mit der Nummer und dann habe ich das Panel welches so meiner Nummer Passt. Und wenn ich ein Neues Panel einfüge mächte schreibe ich es einfach mit der nächsten zuortnungszahl rein.

Aber mal eine andere Frage wieso benutzen die schweizer in Helmi's Beispiel 2 das Result als anscheinende variable ? Hätte immer gedacht, dass das Result(Ergebnis) nur zur Rückmeldung an den Sender benutzt werden kann.

Medium 27. Jun 2009 17:47

Re: Panel
 
Okay, dann hast du ein ganz grundlegendes Konzeptproblem. Du brauchst nur ein einziges Panel, und packst dort immer nur die Daten des jeweils gewählten Artikels rein. U.U. lohnt sich hier auch der Umstieg auf eine richtige DB, so dass man den Komfort von SQL genießen kann.

Edit: Result ist nicht viel anders als eine lokale Variable, nur dass diese an EAX gebunden ist (bei primitiven Typen). Der Aufrufer einer Methode erwartet die Rückgabe in EAX, aber innerhalb der Methode kann damit ganz normal gearbeitet werden.

Kunoishi 27. Jun 2009 17:52

Re: Panel
 
an die db hatte ich schon gedacht, jedoch kam ich bei der installation mit der weitergabe der Interbase nicht weiter
und konnte so nicht mit der datenbank komunizieren. also habe ich das ganze in dat aufgebaut.
ich bin noch gespannt wie die verarbeitung bei großeren datenmängen wird. wie zum beispiel bei der Suche oder
bei der analyse

Kunoishi 27. Jun 2009 17:55

Re: Panel
 
Liste der Anhänge anzeigen (Anzahl: 2)
ich gebei euch mal hier mein beispiel
an dem ich gerade mein problem versuche

vieleicht habt ihr ja eine lösung für mich

Medium 28. Jun 2009 01:33

Re: Panel
 
Interbase ist ziemlich antiquiert, und sollte in neuen Projekten keine Rolle spielen. Die bei der Weitergabe komfortabelsten DBs sind embedded Varianten wie z.B. von Firebird. Eine andere gute, und für den nicht-kommerziellen Einsatz freie DB ist auch MySQL, wobei diese separat installiert werden muss. DB <> Interbase, viel mehr ist (war) Interbase eine von ziemlich vielen Möglichkeiten.
Strukturierte Dateien sind für kleinere Datenaufkommen bis eine Hand voll hundert Sätzen und ohne komplexe Operationen sicherlich noch zu vertreten, bei dir scheint mir ein halbwegs ordentliches DBMS aber schon recht angemessen. Allein schon weil man über SQL Abfragen so manche Dinge erheblich viel kürzer und eleganter erreichen kann als über handgecodetes Datengeschaufel. Schon nur dafür würde ich eine kleine embedded DB jederzeit strukturierten Dateien vorziehen.
Eine andere Möglichkeit wären u.U. auch noch XML Dateien, die sich mit entsprechenden Providern datenbankähnlich behandeln lassen. Ich bin persönlich zwar kein großer Freund von XML als "Lösung für alles", aber hier wird's dann schon langsam zur Geschmacksfrage (zumindest in diesem Beispiel).


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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