AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Die seltsame Combobox

Ein Thema von Delbor · begonnen am 11. Jan 2018 · letzter Beitrag vom 11. Jan 2018
Antwort Antwort
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Die seltsame Combobox

  Alt 11. Jan 2018, 17:06
Delphi-Version: XE8
Hi zusammen

Mit diesem Array kann ich festlegen, - bzw. sollte ich festlegen können - welche Dateien mir von meinem PathfinderFrame angezeigt werden sollen:
Delphi-Quellcode:
 const
  VALID_EXTENSIONS: array[0..5] of string = ('alle Dateien', '.bmp', '.nef', '.jpg', '.png', '.pdf');
Der Constructor meines PathfinderFrames ruft dazu die prozedur FileMaskInit auf:
Delphi-Quellcode:
procedure TPathFinderFrame.FileMaskInit;
  var i: integer;
begin
  for i := Low(VALID_EXTENSIONS) to High(VALID_EXTENSIONS) do
  begin
// CmbxFileType.Items.Add(VALID_EXTENSIONS[i]);
    if i = 5 then
      CmbxFileType.Text := '.pdf'; //IntToStr(FDefaultType);
    CmbxFileType.AddItem(VALID_EXTENSIONS[i], nil);
  end;
  FileSearcher1.FileMask := VALID_EXTENSIONS[5];
end;
Erstmal hatte ich es mit der auskommentierten Zeile versucht. Resultat: Im Textfeld der Combobox steht der zugewiesene String (.pdf).
Der Rest der Box(die aufklappbare Liste) ist leer.
  • Dann habe ich jene Zeile hinter die if-Abfrage verschoben
  • Dann durch Additem ersetzt
Logischerweise hat das nichts geändert ...

Vor einiger Zeit habe ich bemerkt, das die Basisframes einer Anwendung vor der Mainform erstellt werden - weswegen, ist wohl leicht denkbar. So kam ich auf die Idee, dass dies eventuell der Grund für das seltsame Verhalten ist - aber das ist nicht wirklich nachvollziehbar, wenn einerseits der Text-String eingetragen wird, nicht aber die Items-Strings...

Also bleibt die Frage: Wieso das?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.016 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Die seltsame Combobox

  Alt 11. Jan 2018, 18:34
AddItem ist hier wirklich komplett falsch. Du musst schon Items.Add nehmen. Dann sollte es auch gehen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.993 Beiträge
 
Delphi 12 Athens
 
#3

AW: Die seltsame Combobox

  Alt 11. Jan 2018, 19:07
AddItem ist hier wirklich komplett falsch. Du musst schon Items.Add nehmen. Dann sollte es auch gehen.
Wirklich komplett falsch?
Delphi-Quellcode:
procedure TCustomCombo.AddItem(Item: String; AObject: TObject);
begin
  Items.AddObject(Item, AObject);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#4

AW: Die seltsame Combobox

  Alt 11. Jan 2018, 20:02
Ich verstehe nicht, was Du vorhast, ich kann es nur erahnen
Delphi-Quellcode:
procedure TPathFinderFrame.FileMaskInit;
  var i: integer;
begin
  for i := Low(VALID_EXTENSIONS) to High(VALID_EXTENSIONS) do
  begin
// CmbxFileType.Items.Add(VALID_EXTENSIONS[i]);
    if i = 5 then // Warum fünf? Änder mal das Array und???
      CmbxFileType.Text := '.pdf'; //IntToStr(FDefaultType);
    CmbxFileType.AddItem(VALID_EXTENSIONS[i], nil);
  end;
  FileSearcher1.FileMask := VALID_EXTENSIONS[5];
end;
Eventuell so?
Delphi-Quellcode:
procedure TPathFinderFrame.FileMaskInit;
  var i: integer;
begin
  CmbxFileType.Items.Clear;
  for i := Low(VALID_EXTENSIONS) to High(VALID_EXTENSIONS) do
  begin
    CmbxFileType.AddItem(VALID_EXTENSIONS[i], nil);
  end;
  CmbxFileType.Text := VALID_EXTENSIONS[FDefaultType];
  FileSearcher1.FileMask := CmbxFileType.Text;
  // oder
  CmbxFileType.ItemIndex := FDefaultType;
  FileSearcher1.FileMask := CmbxFileType.Items[FDefaultType];
end;
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Die seltsame Combobox

  Alt 11. Jan 2018, 20:04
Hi zusammen

Die Lösung bahnte sich an, als ich versuchte, die Prozedur von der Mainform aus aufzurufen:
Delphi-Quellcode:
procedure TPDFOfficerMain.FormCreate(Sender: TObject);
  var LFTextSelection : String;
begin
 // DoTextSelectionEvent := PathFinderFrame1.OnTextSelectionEvent;
  FAppDataPath := 'C:\PDFOfficerAppdata';
  PathFinderFrame1.OnTextSelectionEvent := DoTextSelectionEvent;
// PathFinderFrame1.FileMaskInit; //<== Aufruf von hier
  if Fileexists(FAppDataPath+'\TVNameitems.txt') then
  begin
    FSettingDefault := False;
    TVName.LoadFromFile(FAppDataPath+'\TVNameitems.txt');
  end
  else
  begin
    FSettingDefault := true;
    FillTVName;
  end;
end;
Das war erstmal nicht möglich, da ich die Prozedur im Basisframe gewohnheitsmässig private deklariert hatte. Also änderte ich das und verschob die Deklaration in den Puplic-Abschnitt.
Dabei vergass ich, den Aufruf von FileMaskInit aus dem Constructor des Basisframes zu entfernen.
Resultat: Die Items der Combobox waren jetzt doppelt vorhanden.
Fazit: der Basisframe vererbt an seine Instanzen nur das, was public deklariert ist - was ich eigentlich wissen müsste.

AddItem ist hier wirklich komplett falsch. Du musst schon Items.Add nehmen. Dann sollte es auch gehen.
Leider hast du meinen Eingangsthread etwas flüchtig gelesen - ich hatte beides versucht, und beides ging schief. Ich bin übrzeugt: public deklariert würde auch beides funktionieren.
Die Hilfe führt AddItem als Methode von TCustomCombo auf.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Die seltsame Combobox

  Alt 11. Jan 2018, 21:04
Hi Delphi.Narium

Das mit dem leeren der Combobox muss ich noch einbauen, da deren Itemstext ansonsten bei jeder Änderung um die Länge des Arrays zunimmt - auf der andern Seite zeigte mir genau das doppelte Vorhandensein der Items meinen Fehler auf.

Das Feld FDefaultType hatte ich eingeführt, weil es möglich sein soll, einen Defaulttype anzuzeigen. Allerdings hatte ich da einen Denkfehler begangen: der Feldname FDefaultType kann nicht Teil meines Stringarrays sein, sondern allenfalls eines Aufzählungstyps wie zB.

TFileType = (ftDefaultType , ftBMP, ftNEF, ftJPG, ftPNG,ftPDF);

Hier könnte eine Funktion in einem Case-of-Block einen ExtenssionString ermitteln:
Delphi-Quellcode:
  case FFileType of of
  ftDefaultType : Result := '.'
  ftBMP : Result := '.bmp';
  ftNEF : Result := '.nef';
  ftJPG : Result := '.jpg';
  ftPNG : Result := '.png';
  ftPDF : Result := '.pdf';
  end;
Beim Array wärs grundsätzlich dasselbe, mit dem Unterschied, dass die gesuchten Strings (Result der Funktion) an den Ordinalpositionen schon vorhanden sind.

Ich schreibe dies hier übrigens so ausführlich, weil mir die Unterschiede von Aufzählungs-, Mengen- und Arraytypen keineswegs wirklich geläufig sind und ich hoffe, dies auf diese Weise etwas verbessern zu können.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Die seltsame Combobox

  Alt 11. Jan 2018, 21:07
Setz mal den ItemIndex
  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 08:34 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