Autor |
Beitrag |
Blamaster
Beiträge: 164
|
Verfasst: So 15.02.09 17:51
Hi,
ich habe das XPMainfest auf meinem Form. Kann ich es irgendwie hinbekommen, das die Buttons nicht "mitgeskinnt" werden ?
mfg blamaster
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 15.02.09 18:33
Vielleicht hilft Dir dieser Thread weiter: http://www.delphipraxis.net/topic49515_xp+style+fuer+ein+form+abschaltbar.html
[edit] Oder, um das abzukürzen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| uses UxTheme;
procedure TMyForm.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to Pred(ControlCount) do if Controls[i] is TButton then SetWindowTheme(TButton(Controls[i]).Handle,'',''); end; | [/edit]
|
|
Blamaster
Beiträge: 164
|
Verfasst: So 15.02.09 22:06
Danke
mfg blamaster
|
|
Blamaster
Beiträge: 164
|
Verfasst: So 15.02.09 23:38
Ich habe gerade noch eine neue Frage die etwas in die Richtung geht.
Ich zeichne in meinem Programm auf eine TPaintBox.
Nun ist es so, dass wen ich den XP Style verwende, die Buttons und Checkboxen mitbemalt werden
Bild dazu im Anhang.
Jemand eine Idee woran dasliegen kann ?
mfg Blamaster
Einloggen, um Attachments anzusehen!
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 16.02.09 14:52
Kannst Du das Programm mal anhängen? Ich kann mir das dann besser vorstellen.
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 16.02.09 15:04
Liegen die Checkboxen innerhalb der Paintbox? Denn dann liegt das wahrscheinlich daran, dass unter XP diese Controls transparent gezeichnet werden.
_________________ We are, we were and will not be.
|
|
Blamaster
Beiträge: 164
|
Verfasst: Mo 16.02.09 17:35
Hi,
nein leigt außerhalb der Paintbox und ist auch nicht nur bei der ComboBox so sondern auch bei Buttons.
Das Programm anzuhängen wird etwas schwer das es nicht gerade klein ist.
mfg blamaster
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 16.02.09 23:33
Kannst du nicht ein kleines Beispiel daraus machen oder in einer Kopie des gesamten Projektes unwichtige Teile löschen oder so?
Meine Vermutung: Du hast irgendwo die PaintBox vor dem Zugriff auf Canvas vergessen oder with entsprechend falsch eingesetzt.
Oder irgendwo an der Botschaftsbehandlung etwas geändert, z.B. via WndProc.
Weil eine PaintBox, XP-Style und weitere Komponenten habe ich auch schon auf einem Formular gehabt, ohne Probleme. Es gibt aber ohne Demo-Programm einfach zu viele Möglichkeiten, was da falsch sein kann.
|
|
Blamaster
Beiträge: 164
|
Verfasst: Mo 16.02.09 23:56
Hi,
dann poste ich mal die Stellen wo auf die Paintbox gezeichnet wird:
Delphi-Quelltext 1:
| PaintBox.Canvas.StretchDraw(Rect(0, 0, PB.Width, PB.Height), Picture.Graphic); |
Delphi-Quelltext 1: 2: 3: 4:
| procedure DrawLine(y: integer; PB: TPaintBox; cl: TColor); PB.Canvas.Pen.Color := cl; PB.Canvas.MoveTo(x, 0); PB.Canvas.LineTo(x, PB.ClientHeight); |
An weiteren stellen wird auf die Paint Box nicht zugegriffen. An einer Stelle wird noch auf die obere Picture. Graphic gezeichnet.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Picture: TPicture;
Picture.Bitmap.Canvas.Brush.Color := clBlack; Picure.Bitmap.Canvas.FillRect(Rect(0, 0, Picture.Bitmap.Width, Picture.Bitmap.Height));
with Picture.Bitmap do begin Canvas.MoveTo(i, xx); Canvas.Pen.Color := clGreen; Canvas.LineTo(i, ht - xx); end; |
mfg blamaster
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 17.02.09 00:15
Ok, um zu beweisen, dass das so nix bringt, habe ich extra ein kleines Beispiel mit deinen gepostetetn Zeilen gebastelt. Und wie ich nicht anders erwartet hatte funktioniert das problemlos.
Woran das bei dir liegt, kann ich so nicht sagen.
Klar ist nur, dass du irgendetwas machen musst, das das verursacht / das Zeichnen verhindert.
Ach ja: Und ein Problem auf deinem PC wäre natürlich theoretisch auch noch denkbar, aber das ist wohl eher unwahrscheinlich.
Um herauszufinden woran das liegt kopiere doch einfach das komplette Projekt (achte auf Verweise in andere Verzeichnisse ggf.) und lösche dann Schritt für Schritt alles unwichtige. Bis das Problem nicht mehr auftritt oder bis du den Rest hier posten kannst.
Oder versuche es in einem neuen Projekt zu reproduzieren.
// EDIT:
Den dritten Quelltext hast du dazueditiert, oder? Der ist hier jetzt nicht drin.
Einloggen, um Attachments anzusehen!
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 17.02.09 21:56
In der Zwischenzeit habe ich via PN den Quelltext erhalten und ich habe mir das Problem angeschaut.
Das Ergebnis dürfte allgemein interessant sein, deshalb poste ich das einmal hier.
Der Fehler liegt nicht bzw. nicht direkt im (selbst geschriebenen) Quelltext. Aus irgendeinem Grund war das in der kompilierten Exe so, nicht aber, als ich es mit Turbo Delphi / Delphi 2006 kompiliert habe. Da war alles ok.
Daraufhin habe ich es mit Delphi 7 ausprobiert. Und die kompilierte Exe zeigte wieder komische Ränder bei den Buttons.
Ich werde einmal vergleichen und schauen, dass ich das mit Delphi 7 richtig kompiliert bekomme bzw. herausfinde wo der Fehler liegt. Denn eigentlich funktioniert das XP-Manifest ja auch unter Delphi 7.
Du könntest aber zunächst einfach das kostenlose Turbo Delphi benutzen, damit funktioniert es einwandfrei unter Vista wie unter XP.
|
|
Blamaster
Beiträge: 164
|
Verfasst: Di 17.02.09 22:05
Hi,
Danke schonmal für die Hilfe und gut zu wissen das es nicht am Code ansich liegt.
mfg Blamaster
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 17.02.09 22:29
Argh, das liegt an DoubleBuffered. Das funktioniert anscheinend nicht mit Delphi 7 und XP-Style. ich habe gerade nur einen Button aufs Formular und XPMan in die uses gelegt sowie DoubleBuffered in FormCreate auf True gesetzt. Schon dabei tritt das Problem auf.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 17.02.09 22:49
Tatsache, das kann ich bestätigen.
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 17.02.09 23:58
Ich habe mittlerweile auch herausgefunden woran es liegt und bastele gerade eine Lösung, die durch Ersetzen der entsprechenden Prozedur in TWinControl das Problem behebt. Das Problem ist die Behandlung von WM_ERASEBKGND. In Delphi 7 fehlen da zwei Zeilen Code.
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 18.02.09 03:12
So, es genügt, die Unit aus dem Anhang dem Projekt hinzuzufügen. Das behebt das Problem automatisch indem die entsprechenden Botschaftsbehandlungsroutinen von TButton, TWinControl und TButtonControl ersetzt werden.
Die Unit funktioniert natürlich nicht nur für dieses Projekt sondern sollte das Problem allgemein beheben. Bei Buttons und CheckBoxes z.B. habe ich es getestet, sollte es noch bei anderen Komponenten trotzdem auftreten, dann müsste ich das noch ergänzen.
Einloggen, um Attachments anzusehen!
|
|
Blamaster
Beiträge: 164
|
Verfasst: Mi 18.02.09 18:23
Damit funktioniert jetzt alles, kann bis dato auch keine Probleme feststellen.
Vielen Dank dafür
mfg Blamaster
|
|
|