Autor Beitrag
Blamaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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



BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: So 15.02.09 22:06 
Danke :)

mfg blamaster
Blamaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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 :shock:

Bild dazu im Anhang.

Jemand eine Idee woran dasliegen kann ?

mfg Blamaster
Einloggen, um Attachments anzusehen!
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 16.02.09 14:52 
Kannst Du das Programm mal anhängen? Ich kann mir das dann besser vorstellen.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :nixweiss:
Blamaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Mo 16.02.09 23:56 
Hi,

dann poste ich mal die Stellen wo auf die Paintbox gezeichnet wird:

ausblenden Delphi-Quelltext
1:
  PaintBox.Canvas.StretchDraw(Rect(00, PB.Width, PB.Height), Picture.Graphic);					


ausblenden 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.

ausblenden 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(00, 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :nixweiss:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :gruebel:

Du könntest aber zunächst einfach das kostenlose Turbo Delphi benutzen, damit funktioniert es einwandfrei unter Vista wie unter XP.
Blamaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: Di 17.02.09 22:49 
Tatsache, das kann ich bestätigen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164



BeitragVerfasst: Mi 18.02.09 18:23 
Damit funktioniert jetzt alles, kann bis dato auch keine Probleme feststellen.

Vielen Dank dafür :)

mfg Blamaster