AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Unterschiedliche Darstellung mit und ohne laufendem Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschiedliche Darstellung mit und ohne laufendem Delphi

Ein Thema von Alucard · begonnen am 18. Jan 2025 · letzter Beitrag vom 26. Jan 2025
Antwort Antwort
Redeemer

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

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 20. Jan 2025, 11:29
Eins ist Release und eins ist Debug.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Alucard
Alucard

Registriert seit: 9. Jan 2015
11 Beiträge
 
Delphi 12 Athens
 
#2

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 25. Jan 2025, 09:50
Erstmal sorry für die arg verspätete Antwort und vielen Dank für euren Input. Leider habe ich hier im Forum ständig Login- und Passwort-Probleme. Eigentlich hatte ich die gleich folgende Antwort direkt nach Uwes Post abgesetzt, aber die hatte es irgendwie zerhagelt und ich hatte seitdem keine Zeit mehr.


Alright, das ist jetzt peinlich

Kurzfassung: Der Fehler lag gänzlich woanders und - was wichtiger ist - in meiner Verantwortung


Die Listen werden aus zwei Text-Dateien gelesen (je eine für die obere und die untere Box) und im Falle der unteren noch nach einigen Kriterien geprüft. Bei bestandener Prüfung wird das Element angezeigt, sonst halt nicht. Da ich seit der Umstellung ausschließlich Probleme im Zusammenhang mit High-DPI hatte, bin ich blöderweise betriebsblind geworden und habe übersehen, dass in dieser Prüfung der Name des Rechners auf Übereinstimmung mit einer (hart-codierten) Liste untersucht wird - ggf. schaut diese Prüfung auch, ob Delphi läuft

Delphi-Quellcode:
procedure LadenWebTools;
var User : string;
    Delphi : boolean;
    Data : TStringList;
   i : integer;
const EntryLength : integer = 6;
begin
User := GetEnvironmentVariable('Computername');
Delphi := FindWindow('TAppBuilder', nil) <> 0;

Data := TStringList.Create;
Data.LoadFromFile('WebTools.txt');

i := 0;
SetLength(WebTools, 0);

While i <= Data.Count - 1 do
      begin
      SetLength(WebTools, Length(WebTools) + 1);

      With WebTools[High(WebTools)] do
           begin
           Name := Data[i];
           { mehr Daten... }
           Tag := Data[i + 4];
           { mehr Daten... }

           Inc(i, EntryLength);

           { Eintrag wieder löschen, wenn
              -- kein Icon gefunden
              -- keine User Übereinstimmung
              -- bei laufendem Delphi User ignorieren }

           If (FileExists('WebTools\' + Name + '.png') = false) Or
              ( (Tag = 'Home') And (Delphi = false) And (User <> 'User_Home_1')
                                                    And (User <> 'User_Home_2')
                                                    And (User <> 'User_Home_n') ) Or
              ( (Tag = 'Work') And (Delphi = false) And (User <> 'User_Work'  ) )
              then SetLength(WebTools, Length(WebTools) - 1);
           end;
      end;

Data.Free

For i := 0 to High(WebTools) do
    begin
    WebTools[i].Panel := TPanel.Create(Self);
    WebTools[i].Image := TImage.Create(Self);
    WebTools[i].Text := TPanel.Create(Self);
    WebTools[i].BtnOpen := TButton.Create(Self);
    WebTools[i].BtnSearch := TButton.Create(Self);

    { Design... }
    end;
end;

Geändert von TBx (25. Jan 2025 um 11:50 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#3

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 25. Jan 2025, 12:07
Das passiert. Das wichtigste ist ja, dass es nun funktioniert.

Einen Tipp habe ich aber noch. Du machst das ganze ziemlich umständlich. Einfacher und übersichtlicher wäre es so:
Delphi-Quellcode:
procedure LadenWebTools;

  function ReadNextWebTool(const ADataList: TStringList; const AIndex: Integer): TWebTool;
  begin
    Result.Name := ADataList[AIndex];
    { mehr Daten... }
    Result.Tag := ADataList[AIndex + 4];
    { mehr Daten... }
  end;

var
  User: string;
  Delphi: Boolean;
  Data: TStringList;
  CurrentTool: TWebTool;
  i : integer;
const
  EntryLength: Integer = 6;
begin
  User := GetEnvironmentVariable('Computername');
  Delphi := FindWindow('TAppBuilder', nil) <> 0;

  Data := TStringList.Create;
  try
    Data.LoadFromFile('WebTools.txt');

    i := 0;
    SetLength(WebTools, 0);

    while i <= Data.Count - 1 do
    begin
      CurrentTool := ReadNextWebTool(Data, i);
      Inc(i, EntryLength);
      if FileExists('WebTools\' + Name + '.png')
        and CurrentTool.Tag ... then
      begin
        SetLength(WebTools, Length(WebTools) + 1);
        WebTools[High(WebTools)] := CurrentTool;
      end;
    end;
  finally
    Data.Free;
  end;
[...]
Dann hast du eine Funktion, die dir den nächsten Eintrag liest und kannst mit dessen Daten zur Prüfung arbeiten. Daher kannst du das Array dann nur erweitern, wenn du den Eintrag möchtest und musst nichts wieder löschen.
Und du brauchst das leidige with nicht.
Sebastian Jänicke
AppCentral

Geändert von jaenicke (25. Jan 2025 um 19:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 25. Jan 2025, 13:00
Die ReadNextWebTool Implementierung sieht aber nicht wirklich gesund aus...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#5

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 25. Jan 2025, 14:54
Die ReadNextWebTool Implementierung sieht aber nicht wirklich gesund aus...
Ups, ja, ich habe den Parameternamen nicht angepasst. Danke!
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 25. Jan 2025, 15:31
Na ja, auch der Index I ist dort nicht wirklich bekannt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#7

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 25. Jan 2025, 19:20
Ja gut, wenn es sein muss...
So sollte es besser passen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Alucard
Alucard

Registriert seit: 9. Jan 2015
11 Beiträge
 
Delphi 12 Athens
 
#8

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 26. Jan 2025, 15:58
Die ReadNextWebTool Implementierung sieht aber nicht wirklich gesund aus...
Das hatte ich mir zur ersten Version der Antwort auch gedacht, aber wenigstens war das ein offensichtlicher Schnitzer und nicht einer von den fiesen versteckten, die einen Ewigkeiten aufhalten


Was anderes: Sowohl Jaenicke als auch Uwe (iwo bei Stackoverflow...) haben ihre Abneigung gegen das
Code:
With {...} do {...};
geäußert - Warum? Ich finde, das schafft echt Übersicht im Code. Tatsächlich baue ich das sogar nachträglich noch in alte Projekte ein, wenn ich ne passende Stelle sehe
formerly known as Alcuard
(Man muss seinen eigenen Username schon richtig tippen können... )
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
10.075 Beiträge
 
Delphi 12 Athens
 
#9

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 26. Jan 2025, 18:57
Was anderes: Sowohl Jaenicke als auch Uwe (iwo bei Stackoverflow...) haben ihre Abneigung gegen das
Code:
With {...} do {...};
geäußert - Warum? Ich finde, das schafft echt Übersicht im Code. Tatsächlich baue ich das sogar nachträglich noch in alte Projekte ein, wenn ich ne passende Stelle sehe
  • Du kannst an der Stelle den Debugger nicht gut verwenden. Der weiß nicht, was wohin gehört und kann daher keine Tooltips mit dem Wert anzeigen. Und du kannst einen Wert auch nicht einfach mit Strg + F7 auswerten, sondern musst immer den Ausdruck aus with dazu kopieren.
  • Bei einem Upgrade auf eine neue Delphiversion oder auf neue Versionen externer Komponenten können sich schwer zu findende Fehler einschleichen.
    Beispiel: TRect hat in XE2 Width und Height bekommen. Wenn irgendwo ein with auf ein TRect verwendet wurde, was z.B. bei den VirtualTrees der Fall war, gab es im besten Fall einen Fehler beim Kompilieren, aber es gab auch Fälle, in denen plötzlich das TRect geändert wurde statt des Formulars oder der Komponente, die eigentlich gemeint war. Das war dann bei komplexeren Projekten auf den ersten Blick gar nicht zu sehen und führte teilweise zu längerer Fehlersuche.
  • Man sieht nicht auf den ersten Blick, welcher Identifier zu dem Element in with gehört und welcher eigenständig ist, was die Lesbarkeit erschwert. Wenn du selbst in einem Jahr auf den Quelltext schaust oder gar jemand anderes, braucht das Verständnis des Quelltextes entsprechend länger.
  • Du kannst Teile des Quelltextes nicht einfach kopieren oder überarbeiten, weil du auf das with Rücksicht nehmen muss, was die Wartbarkeit reduziert.
  • Der LSP und damit die Codevervollständigung funktionieren damit schlechter. Kreuzbeziehungen und with sind da sehr schlecht.
Tatsächlich kenne ich Hooks in Quelltextrepositories, die ein Einchecken verhindern, wenn darin ein with enthalten ist.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.587 Beiträge
 
Delphi 12 Athens
 
#10

AW: Unterschiedliche Darstellung mit und ohne laufendem Delphi

  Alt 26. Jan 2025, 19:19
Abgesehn davon: relative Pfade
Ein Therapeut entspricht 1024 Gigapeut.
  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 12:41 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