Delphi-PRAXiS
Seite 1 von 3  1 23      

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 Position der Labels unverständlich? (https://www.delphipraxis.net/173486-position-der-labels-unverstaendlich.html)

OrNEC 27. Feb 2013 20:28

Position der Labels unverständlich?
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Jungs,

ich positioniere wie folgt meine Labels (Screenshot3). Das Problem ist, dass bei der ersten Selektion eines Buches die Labels weit auseinander liegen (Sceenshot1), wenn man aber das zweite mal oder weiter Bücher auswählt ist alles ok, wie nach dem Code (Screeshot2).

Was mache ich falsch? Wieso macht die erste Selektion diese Probleme?

Delphi-Quellcode:
procedure TForm1.DetailsDynamWidth();
begin
  // Mediuminfos in der rechten Spalte anzeigen
  DetailsMediatitleLabel.Width := MediaScrollBox.Width - 35;
  DetailsAuthorLabel.Width := MediaScrollBox.Width - 35;
  DetailsDescriptionLabel.Width := MediaScrollBox.Width - 35;
  DetailsEditionLabel.Width := MediaScrollBox.Width - 35;
  DetailsPublisherLabel.Width := MediaScrollBox.Width - 35;
  DetailsISBNLabel.Width := MediaScrollBox.Width - 35;
  DetailsCategoryLabel.Width := MediaScrollBox.Width - 35;
  DetailsLanguageLabel.Width := MediaScrollBox.Width - 35;
  DetailsPlaceLabel.Width := MediaScrollBox.Width - 35;

  DetailsAuthorLabel.Top := DetailsMediatitleLabel.Top + DetailsMediatitleLabel.Height + 6;
  DetailsDescriptionLabel.Top := DetailsAuthorLabel.Top + DetailsAuthorLabel.Height + 10;
  DetailsEditionLabel.Top := DetailsDescriptionLabel.Top + DetailsDescriptionLabel.Height + 12;
  DetailsPublisherLabel.Top := DetailsEditionLabel.Top + DetailsEditionLabel.Height + 6;
  DetailsISBNLabel.Top := DetailsPublisherLabel.Top + DetailsPublisherLabel.Height + 6;
  DetailsCategoryLabel.Top := DetailsISBNLabel.Top + DetailsISBNLabel.Height + 12;
  DetailsLanguageLabel.Top := DetailsCategoryLabel.Top + DetailsCategoryLabel.Height + 6;
  DetailsPlaceLabel.Top := DetailsLanguageLabel.Top + DetailsLanguageLabel.Height + 6;
end;

Popov 27. Feb 2013 20:36

AW: Position der Labels unverständlich?
 
Warum setzt du die Labels nicht Align auf alTop?

Zu deiner Frage - evtl. wird die Prozedur vor dem ersten Mal noch nicht aufgerufen.

lbccaleb 27. Feb 2013 20:38

AW: Position der Labels unverständlich?
 
Kann es sein das du deinem Description Label beim Text zuweisen irgendwie Zeilenumbrüche oder sowas mit übergibst?

Ansonnsten ists wohl schwer zu sagen, da der Fehler wohl nicht in dem von dir geposteten Code steckt.

Aviator 27. Feb 2013 20:39

AW: Position der Labels unverständlich?
 
Hi,

lass dir mal die Height des Description Labels ausgeben. Bei WordWrap passiert es manchmal, dass die Höhe nicht auf die gewünschte Höhe gesetzt wird und somit alle anderen Labels nach unten verschoben werden, da du die Position ja daran ausmachst.

OrNEC 27. Feb 2013 20:45

AW: Position der Labels unverständlich?
 
Zitat:

Zitat von Popov (Beitrag 1205304)
Warum setzt du die Labels nicht Align auf alTop?

Zu deiner Frage - evtl. wird die Prozedur vor dem ersten Mal noch nicht aufgerufen.

Mit alTop stecken die Labels irgendwie oben und werden überhaupt nicht ausgerichtet.

Die Prozedure wird schon ausgeführt, denn die Labels werden beim ersten Prozedureaufruf auseinander positioniert.

OrNEC 27. Feb 2013 20:47

AW: Position der Labels unverständlich?
 
Zitat:

Zitat von Aviator (Beitrag 1205306)
Hi,

lass dir mal die Height des Description Labels ausgeben. Bei WordWrap passiert es manchmal, dass die Höhe nicht auf die gewünschte Höhe gesetzt wird und somit alle anderen Labels nach unten verschoben werden, da du die Position ja daran ausmachst.

Denke ich aus so, aber wieso wird es nur beim ersten Aufruf so gemacht, danach nicht mehr. :gruebel:

Aviator 27. Feb 2013 20:51

AW: Position der Labels unverständlich?
 
Woher lädst du denn die Beschreibung? Ich vermute mal aus einer DB wie MSSQL MySQL oder auch Access. Wie sind dort (wenn es eine DB ist) die Felder formatiert (Feldtyp, Feldlänge).
Hängen hinter der Beschreibung etwaige Zeilenumbrüche (wie es auch schon von lbccaleb gesagt wurde) oder auch Leerzeichen. Ist es immer nur beim Buch mit dem Index 1 oder immer beim ersten Buch egal welchen Index dieses in deiner Liste hat?

OrNEC 27. Feb 2013 20:54

AW: Position der Labels unverständlich?
 
So lese ich die Daten ein:

Delphi-Quellcode:
procedure TForm1.DetailsMedia();
var dbFile: String;
    db: TSQLiteDatabase;
    tb: TSQLIteTable;
    MyLabel: TLabel;
    MyMemo: TMemo;
begin
  dbFile := ExtractFilePath(ParamStr(0)) + 'Database.db';
  db := TSQLiteDatabase.Create(dbFile);
  try

    // Datensaetze der media Tabelle einlesen
    tb := db.GetTable('SELECT media.id_media,'
    + 'media.mediatitle, '
    + 'media.description, '
    + 'media.edition, '
    + 'media.publicationyear, '
    + 'publisher.pubname, '
    + 'media.isbn, '
    + 'place.planame, '
    + 'category.catname, '
    + 'language.langname, '
    + 'entleiher.elastname, '
    + 'entleiher.efirstname, '
    + 'author.aname '
    + 'FROM media '
    + 'LEFT JOIN publisher ON media.fk_publisher_id=publisher.id_publisher '
    + 'LEFT JOIN place ON media.fk_place_id=place.id_place '
    + 'LEFT JOIN category ON media.fk_category_id=category.id_category '
    + 'LEFT JOIN language ON media.fk_language_id=language.id_language '
    + 'LEFT JOIN author ON media.fk_author_id=author.id_author '
    + 'LEFT JOIN entleiher ON media.fk_entleiher_id=entleiher.id_entleiher WHERE id_media='+idinb+'');
    try
      // Datensatz anzeigen
      if tb.Count > 0 then
      begin
        // Mediatitle
        DetailsMediatitleLabel.Caption := tb.FieldAsString(tb.FieldIndex['mediatitle']);

        // Author
        DetailsAuthorLabel.Caption := tb.FieldAsString(tb.FieldIndex['aname']);

        // Description
        DetailsDescriptionLabel.Caption := tb.FieldAsString(tb.FieldIndex['description']);

        // Edition
        DetailsEditionLabel.Caption := tb.FieldAsString(tb.FieldIndex['edition']) + '. Auflage' + ' ' + tb.FieldAsString(tb.FieldIndex['publicationyear']);

        // Publisher
        DetailsPublisherLabel.Caption := 'Verlag: ' + tb.FieldAsString(tb.FieldIndex['pubname']);

        // ISBN
        DetailsISBNLabel.Caption := 'ISBN: ' + tb.FieldAsString(tb.FieldIndex['isbn']);

        // Category
        DetailsCategoryLabel.Caption := 'Kategorie: ' + tb.FieldAsString(tb.FieldIndex['catname']);

        // Language
        DetailsLanguageLabel.Caption := 'Sprache: ' + tb.FieldAsString(tb.FieldIndex['langname']);

        // Place
        DetailsPlaceLabel.Caption := 'Stehplatz: ' + tb.FieldAsString(tb.FieldIndex['planame']);

        // Breiter der Detailansicht anpassen
        DetailsDynamWidth();
      end;

    finally
      tb.Free;
    end;

  finally
    db.Free;
  end;

end;

Aviator 27. Feb 2013 20:58

AW: Position der Labels unverständlich?
 
Dann noch zur Frage, wie denn die einzelnen Felder in der Datenbank formatiert sind (s. letzter Beitrag)?!

OrNEC 27. Feb 2013 21:00

AW: Position der Labels unverständlich?
 
Delphi-Quellcode:
procedure TForm1.DBerstellen1Click(Sender: TObject);
var dbFile: String; // DB Verzeichniss
    db: TSQLiteDatabase; // Klasse
    sSQL, sSQL1, sSQL2, sSQL3, sSQL4, sSQL5, sSQL6: String;
begin
  dbFile := ExtractFilePath(ParamStr(0)) + 'Database.db';
  db := TSQLiteDatabase.Create(dbFile);
  try

    // Tabelle entleiher wird, sofern sie existiert, gelöscht
    if db.TableExists('entleiher') then
    begin
      sSQL1 := 'DROP TABLE entleiher';
      db.execSQL(sSQL1);
    end;

    // Tabelle author wird, sofern sie existiert, gelöscht
    if db.TableExists('author') then
    begin
      sSQL2 := 'DROP TABLE author';
      db.execSQL(sSQL2);
    end;

    // Tabelle category wird, sofern sie existiert, gelöscht
    if db.TableExists('category') then
    begin
      sSQL3 := 'DROP TABLE category';
      db.execSQL(sSQL3);
    end;

    // Tabelle publisher wird, sofern sie existiert, gelöscht
    if db.TableExists('publisher') then
    begin
      sSQL4 := 'DROP TABLE publisher';
      db.execSQL(sSQL4);
    end;

    // Tabelle place wird, sofern sie existiert, gelöscht
    if db.TableExists('place') then
    begin
      sSQL5 := 'DROP TABLE place';
      db.execSQL(sSQL5);
    end;

    // Tabelle language wird, sofern sie existiert, gelöscht
    if db.TableExists('language') then
    begin
      sSQL6 := 'DROP TABLE language';
      db.execSQL(sSQL6);
    end;

    // Tabelle media wird, sofern sie existiert, gelöscht
    if db.TableExists('media') then
    begin
      sSQL := 'DROP TABLE media';
      db.execSQL(sSQL);
    end;

    // Enable foreign key constraints
    db.execSQL('PRAGMA foreign_keys = ON;');

    // Tabelle entleiher anlegen
    sSQL1 := 'CREATE TABLE entleiher ([id_entleiher] INTEGER PRIMARY KEY NOT NULL,';
    sSQL1 := sSQL1 + '[efirstname] VARCHAR (255) NOT NULL,';
    sSQL1 := sSQL1 + '[elastname] VARCHAR (255) NOT NULL,';
    sSQL1 := sSQL1 + '[telefon] VARCHAR (255),';
    sSQL1 := sSQL1 + '[email] VARCHAR (255), UNIQUE(efirstname, elastname));';

    // Tabelle author anlegen
    sSQL2 := 'CREATE TABLE author ([id_author] INTEGER PRIMARY KEY NOT NULL,';
    sSQL2 := sSQL2 + '[aname] VARCHAR (255) NOT NULL, UNIQUE(aname));';

    // Tabelle category anlegen
    sSQL3 := 'CREATE TABLE category ([id_category] INTEGER PRIMARY KEY NOT NULL,';
    sSQL3 := sSQL3 + '[catname] VARCHAR (255) NOT NULL, UNIQUE(catname));';

    // Tabelle publisher anlegen
    sSQL4 := 'CREATE TABLE publisher ([id_publisher] INTEGER PRIMARY KEY NOT NULL,';
    sSQL4 := sSQL4 + '[pubname] VARCHAR (255) NOT NULL, UNIQUE(pubname));';

    // Tabelle place anlegen
    sSQL5 := 'CREATE TABLE place ([id_place] INTEGER PRIMARY KEY NOT NULL,';
    sSQL5 := sSQL5 + '[planame] VARCHAR (255) NOT NULL, UNIQUE(planame));';

    // Tabelle language anlegen
    sSQL6 := 'CREATE TABLE language ([id_language] INTEGER PRIMARY KEY NOT NULL,';
    sSQL6 := sSQL6 + '[langname] VARCHAR (255) NOT NULL, UNIQUE(langname));';

    // Tabelle media wird angelegt
    sSQL := 'CREATE TABLE media ([id_media] INTEGER PRIMARY KEY NOT NULL,';
    sSQL := sSQL + '[mediatitle] VARCHAR (255) NOT NULL,';
    sSQL := sSQL + '[description] VARCHAR (255),';
    sSQL := sSQL + '[status] INTEGER NOT NULL,';
    sSQL := sSQL + '[isbn] VARCHAR (255),';
    sSQL := sSQL + '[edition] INTEGER,';
    sSQL := sSQL + '[publicationyear] INTEGER,';
    sSQL := sSQL + '[fk_publisher_id] INTEGER,';
    sSQL := sSQL + '[fk_place_id] INTEGER,';
    sSQL := sSQL + '[fk_category_id] INTEGER NOT NULL,';
    sSQL := sSQL + '[fk_language_id] INTEGER NOT NULL,';
    sSQL := sSQL + '[fk_author_id] INTEGER,';
    sSQL := sSQL + '[fk_entleiher_id] INTEGER,';
    sSQL := sSQL + 'FOREIGN KEY(fk_publisher_id) REFERENCES publisher(id_publisher) ON DELETE RESTRICT,';
    sSQL := sSQL + 'FOREIGN KEY(fk_place_id) REFERENCES place(id_place) ON DELETE RESTRICT,';
    sSQL := sSQL + 'FOREIGN KEY(fk_category_id) REFERENCES category(id_category) ON DELETE RESTRICT,';
    sSQL := sSQL + 'FOREIGN KEY(fk_language_id) REFERENCES language(id_language) ON DELETE RESTRICT,';
    sSQL := sSQL + 'FOREIGN KEY(fk_author_id) REFERENCES author(id_author) ON DELETE RESTRICT,';
    sSQL := sSQL + 'FOREIGN KEY(fk_entleiher_id) REFERENCES entleiher(id_entleiher) ON DELETE RESTRICT);';

    // Create Befehl wird ausgeführt
    db.execSQL(sSQL1);
    db.execSQL(sSQL2);
    db.execSQL(sSQL3);
    db.execSQL(sSQL4);
    db.execSQL(sSQL5);
    db.execSQL(sSQL6);
    db.execSQL(sSQL);

    // Transaktion beginnt
    db.BeginTransaction;

    // entleiher Tabelle füllen
    sSQL1 := 'INSERT INTO entleiher(efirstname, elastname, telefon, email)';
    sSQL1 := sSQL1 + 'VALUES ("Alexander", "Bayer", "0123-567890", "alex@bayer_xyz.de");';

    // author Tabelle füllen
    sSQL2 := 'INSERT INTO author(aname)';
    sSQL2 := sSQL2 + 'VALUES ("Dr. Werner Gimp");';

    // category Tabelle füllen
    sSQL3 := 'INSERT INTO category(catname)';
    sSQL3 := sSQL3 + 'VALUES ("Buch");';

    // publisher Tabelle füllen
    sSQL4 := 'INSERT INTO publisher(pubname)';
    sSQL4 := sSQL4 + 'VALUES ("CLW");';

    // place Tabelle füllen
    sSQL5 := 'INSERT INTO place(planame)';
    sSQL5 := sSQL5 + 'VALUES ("Rof");';

    // language Tabelle füllen
    sSQL6 := 'INSERT INTO language(langname)';
    sSQL6 := sSQL6 + 'VALUES ("Deutsch");';

    // media Tabelle füllen
    sSQL := 'INSERT INTO media(fk_author_id, mediatitle, description, status, isbn,';
    sSQL := sSQL + 'edition, publicationyear, fk_publisher_id, fk_place_id, fk_category_id, fk_language_id, fk_author_id, fk_entleiher_id) VALUES (1, "Java", "Das ist die Besch.", 1,';
    sSQL := sSQL + '"3-3434-78", 3, 2012, 1, 1, 1, 1, 1, 1);';

    // Insert Befehl wird ausgeführt
    db.ExecSQL(sSQL1);
    db.ExecSQL(sSQL2);
    db.ExecSQL(sSQL3);
    db.ExecSQL(sSQL4);
    db.ExecSQL(sSQL5);
    db.ExecSQL(sSQL6);
    db.ExecSQL(sSQL);

    // Transaktion endet
    db.Commit;

  finally
    db.Free;
  end;

  ShowMedia();
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Seite 1 von 3  1 23      

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