AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TDimPanel für BodenseeMatze

TDimPanel für BodenseeMatze

Ein Thema von Renate Schaaf · begonnen am 28. Mai 2025 · letzter Beitrag vom 2. Jun 2025
 
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
135 Beiträge
 
Delphi 11 Alexandria
 
#1

TDimPanel für BodenseeMatze

  Alt 28. Mai 2025, 14:02
Ein Panel, welches wenn's aktiviert ist, sich über eine anwählbare TWinControl legt, die runtergedimmed und deaktiviert wird (wie eine halbdurchsichtige Glasplatte). Auf dem Panel können Controls platziert werden, die man dann benutzen kann. Ergebnis einer Zusammenarbeit im englischen Forum, Hauptautor: aehimself. Hab alles so umgeschrieben, dass es bei mir unter Delphi2006 läuft, sollte unter Delphi7 evtl. auch direkt so funktionieren.
Im Design kann man das Panel einfach irgendwo platzieren und die Eigenschaften einstellen. Bei Ausführung kann das Panel dann über beliebige TWinControls gelegt werden.

Anleitung: DimPanel.dpk installieren, mit DemoDim.dpr ausprobieren. (Ja, ich habe kein extra Design-Package gemacht .

Hoffe, es funktioniert.

Renate

Edit:
Fix für Range-Check-Error: Man könnte Range-Check in DimPanel.dpk einfach ausstellen. Besser ist es, die AlphaBlend Routine in uDimPanel.pas (implemetation) durch folgende zu ersetzen:
Delphi-Quellcode:
//Replace shr 8 by div 256, so we don't get a range check error.
//Turn optimization on, so div 256 runs as fast as shr 8
//The optimizer sees that 256 is a power of 2.
{$IFOPT O- }
{$DEFINE O_MINUS }
{$O+ }
{$ENDIF }
{$IFOPT Q+}
{$DEFINE Q_PLUS}
{$Q-}
{$ENDIF}

//AlphaBlend Source and Target using alpha/255 on Source, 1-alpha/255 on Target
//and store result in target.
procedure Alphablend(Source, Target: TBitmap; Alpha: Byte);
var stride: integer;
    ps, pt: PByte;
    i: integer;
begin
  Assert(Source.pixelformat=pf24bit);
  Assert(Target.pixelformat=pf24bit);
  Assert(Source.width=target.Width);
  Assert(Source.height=target.Height);
  stride:=((Source.Width * 24 + 31) and not 31) div 8;
  ps:=Source.ScanLine[Source.Height-1];
  pt:=Target.ScanLine[Target.Height-1];
  for I := 1 to Source.Height*stride do
  begin
    pt^:=pt^ + (Alpha*(ps^-pt^)) div 256;
    inc(pt);
    inc(ps);
  end;
end;

//Restore optimization to original
{$IFDEF O_MINUS}
{$O-}
{$UNDEF O_MINUS}
{$ENDIF}
{$IFDEF Q_PLUS}
{$Q+}
{$UNDEF Q_PLUS}
{$ENDIF}
Styles:
Das DimPanel flickert wie bekloppt, wenn man VCL-Styles verwendet.
Einfacher "Fix": seBorder aus den Style-Elements für das Form herausnehmen.
Angehängte Dateien
Dateityp: zip DimPanel.zip (6,3 KB, 33x aufgerufen)
Renate

Geändert von Renate Schaaf ( 1. Jun 2025 um 09:29 Uhr) Grund: Autor hinzugefügt
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:42 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