Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Zeilenumbruch verbessern (https://www.delphipraxis.net/200942-zeilenumbruch-verbessern.html)

EWeiss 10. Jun 2019 10:58


Zeilenumbruch verbessern
 
Wie kann man das besser lesbar machen.. Mich stören die vielen "#13#10"

Delphi-Quellcode:
    sYear := FormatDateTime('yyyy', Date);
    MessageStr := 'Version 1.00' + #13#10#13#10 + 'Author Not Yet' + #13#10 + 'copyright (c) ' +
          sYear + #13#10 + 'wwww.yourweb.com' + #13#10#13#10#13#10#13#10#13#10#13#10#13#10 +
          'SK_AERO Library' + #13#10 + 'BrewIdeas©Emil Weiss';
Gibt es da keine andere Art der Formatierung für die Umbrüche?
bsp. n\n\n\\n

gruss

peterbelow 10. Jun 2019 11:19

AW: Zeilenumbruch verbessern
 
Zitat:

Zitat von EWeiss (Beitrag 1434269)
Wie kann man das besser lesbar machen.. Mich stören die vielen "#13#10"

Delphi-Quellcode:
    sYear := FormatDateTime('yyyy', Date);
    MessageStr := 'Version 1.00' + #13#10#13#10 + 'Author Not Yet' + #13#10 + 'copyright (c) ' +
          sYear + #13#10 + 'wwww.yourweb.com' + #13#10#13#10#13#10#13#10#13#10#13#10#13#10 +
          'SK_AERO Library' + #13#10 + 'BrewIdeas©Emil Weiss';
gruss

Du kannst anstelle #13#10 die sLinebreak-Konstante verwenden, aber das ändert das Grundproblem natürlich nicht. Der IDE Editor erlaubt aber keine String-Konstanten, die mehrere Zeilen enthalten, bei denen also die im Editor eingegebenen Zeilenumbrüche Teil des Strings sein sollen.

Was man natürlich machen kann ist innerhalb der Konstante einen Platzhalter zu verwenden, z. B. "|". Denn muß man dann per StringReplace durch einen Zeilenumbruch ersetzen, bevor man den String irgendwo verwendet.

Delphi-Quellcode:
   
const
  BreakPlaceholder = '|';
  Version = 'Version 1.00||Author Not Yet|copyright (c) %s|wwww.yourweb.com'
     + '|||||||SK_AERO Library|BrewIdeas©Emil Weiss';

function MakeMultilineText(const aTemplate: string): string);
begin
  result := StringReplace(aTemplate, BreakPlaceholder, sLinebreak, [rfReplaceAll]);
end;


 ...
 sYear := FormatDateTime('yyyy', Date);
 MessageStr := Format(MakeMultilineText(Version),[sYear]);

EWeiss 10. Jun 2019 11:23

AW: Zeilenumbruch verbessern
 
Danke Peter sieht gut aus werde das mal testen.

PS:
Funktioniert Super.. Macht zwar das gleiche ;) ist aber lesbarer\Verständlicher.

gruss

p80286 10. Jun 2019 12:44

AW: Zeilenumbruch verbessern
 
Wer gibt denn die Message aus?
Je nachdem kannst Du z.B. den VT (x0B) verwenden.

Gruß
K-H

Delphi.Narium 10. Jun 2019 14:48

AW: Zeilenumbruch verbessern
 
Wie wäre es denn mit sowas?
Delphi-Quellcode:
const
  csVersion = 'Version 1.00%1:s%1:sAuthor Not Yet%1:scopyright (c) %0:s%1:swwww.yourweb.com'
            + '%1:s%1:s%1:s%1:s%1:s%1:s%1:sSK_AERO Library%1:sBrewIdeas©Emil Weiss';
...
var
        MessageStr : String;
        sYear     : String;
begin
...
  sYear := FormatDateTime('yyyy', Date);
  MessageStr := Format(csVersion,[sYear,sLinebreak]);
  ShowMessage(MessageStr);
...
end;

EWeiss 10. Jun 2019 16:38

AW: Zeilenumbruch verbessern
 
Die Lösung von Peter ist gut für mich..
Danke.

gruss

EWeiss 11. Jun 2019 03:14

AW: Zeilenumbruch verbessern
 
Fertisch..

Es geht nur um das Interface..
Es gibt keine ausführende Funktionen

So werden die Button für das Menu erstellt.
Daraus ergibt sich dann einer dieser Einträge.

Delphi-Quellcode:
      btnMenu := CTRL_PushButtonCreate;
      btnMenu.ImagePath := SpriteResPath + 'BTN_Push.png';
      btnMenu.Text := PWideChar(sLabel);
      btnMenu.Left := 1 + 20;
      btnMenu.Top := Step;
      btnMenu.Width := w - (2 + 20);
      btnMenu.Height := Height;
      btnMenu.DlgItemID := ID;
      btnMenu.TextCol := gSprMenuC.GD_ARGB(255, 255, 255, 255);
      btnMenu.Label3D := -1;
      btnMenu.TextAlligment := Left;
      btnMenu.ImageStateMax := 0;
      btnMenu.ImageFrontPath := sResource;
      btnMenu.ImageFrontX := 4;
      btnMenu.ImageFrontY := 1;
      btnMenu.TextLeft := btnMenu.Left + 8;
      btnMenu.CreateWindow(HSprMenuC);
      btnMenu.Enabled := true;
      SKAERO_SetZorder(HSprMenuC, HWND_TOP);
      ShowWindow(btnMenu.Handle, SW_HIDE);

      if UseCheck then
      begin
        btnMenu.SetPrivateFont(SpriteResPath + 'Marlett.ttf', MarletFontName, 22,
          FontStyleRegular, gSprMenuC.GD_ARGB(255, 0, 0, 0), PWideChar(sCheck),
          w - (Height + 20), 2, Height - 4, 22, ID, SKAERO_BTNTEXTCOLOR,
          false, BS_LABEL_LEFT, -1, btnMenu.Handle);
      end;
gruss

EWeiss 12. Jun 2019 18:29

AW: Zeilenumbruch verbessern
 
Könnte mal bitte jemand das teil testen?
Es geht mir darum ob das Menu Flicker frei bei euch läuft.

Danke.

PS:
Seid so fair und gebt doch bitte eine Rückmeldung wenn ihr den Kram schon ladet. Thanks!
Andernfalls macht es keine sinn die Datei überhaupt runter zu laden.


Danke für das testen. (Anhang gelöscht)

gruss

holger_barntrup 13. Jun 2019 06:13

AW: Zeilenumbruch verbessern
 
Läuft bei mir leider nicht. Die Datei Graphics.dcu wird nicht gefunden.

TraumTaenzerDieter 13. Jun 2019 06:33

AW: Zeilenumbruch verbessern
 
Auf Win7x64 läuft es und auch flickerfrei.
Nur wenn ich die Fensterhöhe per Titlebar verändere
dann tun mir "die Augen weh".

DasWolf 13. Jun 2019 08:15

AW: Zeilenumbruch verbessern
 
Zitat:

Zitat von TraumTaenzerDieter (Beitrag 1434495)
Nur wenn ich die Fensterhöhe per Titlebar verändere
dann tun mir "die Augen weh".

Das ist bei mir auch so.

Alles andere läuft bei mir auf Windows 8.1 64 Bit flickerfrei.
Das Einzige was aufgefallen ist, ist, dass bei Abwahl der Checkboxen "Crystal" oder "Blur mode" zuerst ganz kurz ein Zwischenbackground kommt und dann erst der Standard.

EWeiss 13. Jun 2019 13:33

AW: Zeilenumbruch verbessern
 
Zitat:

Läuft bei mir leider nicht. Die Datei Graphics.dcu wird nicht gefunden.
Das hat dann aber mit deinem System zu tun Graphics ist eine Standard Unit in Delphi.
Zitat:

Auf Win7x64 läuft es und auch flickerfrei.
Danke euch.. Habe vergessen bei zu schreiben das ich ältere System nicht mehr unterstütze. mindestens Win10
Windows 10 verwendete eine andere Methode für Blur wundert mich das es unter win7 damit noch geht.

Zitat:

Nur wenn ich die Fensterhöhe per Titlebar verändere dann tun mir "die Augen weh".
Muss ich mal prüfen Danke.

Zitat:

Das Einzige was aufgefallen ist, ist, dass bei Abwahl der Checkboxen "Crystal" oder "Blur mode" zuerst ganz kurz ein Zwischenbackground kommt und dann erst der Standard.
Wenn dann nur beim Blur Effekt.
Diese Implementierung ist unter Windows 10 sehr schlecht. Es arbeitet nicht mit WM_PRINT zusammen und die Regionen von Fenstern werden grundsätzlich ignoriert.

Nebenbei der Fix für den Resize.. auch wenn es darum eigentlich nicht ging.

Delphi-Quellcode:
{$REGION 'Procedure ResizeWindow'}

procedure ResizeWindow(WinHandle: HWND; ChangeBackground: integer);
begin

  if SKAERO_IsEngineAssigned then
  begin
    // Nicht minimiert
    if ChangeBackground = 0 then
      if not IsIconic(WinHandle) then
        ShowWindow(WinHandle, SW_HIDE);

    if SKAERO_Composited(WinHandle) then
      lRes := SKAERO_BeginDeferWindowPos(WinHandle, 0);

    // Hintergrund neuzeichnen
    SKAERO_DrawBackground(WinHandle);
   
    // Controls Repositionieren
    SKAERO_AnchorEnum(WinHandle);

    if SKAERO_Composited(WinHandle) then
      SKAERO_EndDeferWindowPos(WinHandle, lRes);

    if ChangeBackground <> 0 then
      SKAERO_UpdateWindow(WinHandle, False);

    if ChangeBackground = 0 then
      ShowWindow(WinHandle, SW_SHOW);
  end;
end;
{$ENDREGION}
gruss

EWeiss 13. Jun 2019 17:30

AW: Zeilenumbruch verbessern
 
Zitat:

Nur wenn ich die Fensterhöhe per Titlebar verändere dann tun mir "die Augen weh".
Nochmal.. wegen dem Fenster wenn du es mit der linken Seite in der Größe veränderst.
Mache das mal mit dem Explorer.. was denkst du was dort abgeht?
Richtig genau das selbe nur halt nicht ganz so sichtbar wie bei mir.

Von oben verändert..
Schau mal wie die Statusbar da rum hüpft.

Von der linken Seite verändert..
Da hüpft fast alles rum.

Wie soll man das als Developer korrekt ausrichten wenn es selbst der Explorer nicht mal kann.

gruss

holger_barntrup 14. Jun 2019 09:49

AW: Zeilenumbruch verbessern
 
[QUOTE=EWeiss;1434556Das hat dann aber mit deinem System zu tun Graphics ist eine Standard Unit in Delphi.[/QUOTE]

Es musste bei mir vcl.graphics heißen, jetzt läuft es.
Win7 64Bit

Hüpft halt wie schon geschrieben. Blur und Crystal funktionieren ohne Probleme.

EWeiss 14. Jun 2019 14:57

AW: Zeilenumbruch verbessern
 
Zitat:

Zitat von holger_barntrup (Beitrag 1434633)
Zitat:

Zitat von EWeiss (Beitrag 1434556)
Das hat dann aber mit deinem System zu tun Graphics ist eine Standard Unit in Delphi.

Es musste bei mir vcl.graphics heißen, jetzt läuft es.
Win7 64Bit

Hüpft halt wie schon geschrieben. Blur und Crystal funktionieren ohne Probleme.

OK. Danke! Habe das hüpfen schon behoben..
Entferne in uMain\WinMain bei wc.style "CS_HREDRAW or CS_VREDRAW" dann hüpfen zumindest die Controls nicht mehr.
Die rechte Seite zieht jedoch immer noch nach.

Nun gut bedient man das Teil normal über die Rechte Seite beim resize dann hat man die Probleme nicht.

Delphi-Quellcode:
{$REGION 'Procedure ResizeWindow'}

procedure ResizeWindow(WinHandle: HWND; ChangeBackground: integer);
begin

  if SKAERO_IsEngineAssigned then
  begin
    if SKAERO_Composited(WinHandle) then
      lRes := SKAERO_BeginDeferWindowPos(WinHandle, 0);

    // Hintergrund neuzeichnen
    SKAERO_DrawBackground(WinHandle);

    // Controls Repositionieren
    SKAERO_AnchorEnum(WinHandle);

    if SKAERO_Composited(WinHandle) then
      SKAERO_EndDeferWindowPos(WinHandle, lRes);

    SKAERO_UpdateWindow(WinHandle, False);
    SKAERO_UpdateWindow(TabInfo.Handle, False);
  end;
end;
{$ENDREGION}
Delphi-Quellcode:
function WinMain(hInstance: HINST; hPrevInstance: HINST; lpCmdLine: PChar; nCmdShow: integer)
  : integer; stdcall;

var
  Msg: TMsg;
  myClass: PWideChar;
  myTitle: PWideChar;
  dwStyle: DWORD;
  dwExStyle: DWORD;
  wc: TWndClassEx;
  X: integer;
  Y: integer;
  IsInitialized: Bool;
  rc: TRect;
  Path: string;

begin

  myClass := 'POPUPWINDOW';

  wc.cbSize := SIZEOF(wc);
  IsInitialized := GetClassInfoEx(hInstance, myClass, wc);
  if IsInitialized = False then
  begin
    wc.cbSize := SIZEOF(wc);
    // Remove the Flicker of Window change size from left or Top side
    // deactivate CS_HREDRAW or CS_VREDRAW
    wc.style := CS_DBLCLKS;
gruss


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