![]() |
StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist das?
Hallo zusammen,
ich habe hier einen Codeteil gefunden der in einer Statusbar eine Laufschrift zeichnet...(zeichnen soll)
Delphi-Quellcode:
Leider verstehe ich von der folgenden Zeile nun überhaupt nichts:
private
x, i: Integer; S: String; r: TRect; { ... } uses CommCtrl; { ... } procedure TForm1.Timer1Timer(Sender: TObject); begin [u]StatusBar1.Perform(SB_GETRECT, 1, integer(@r));[/u] r.Right := r.Right - 1; //-1 wegen dem rechten Rand r.Left := r.Left + 1; //+1 wegen dem linken Rand StatusBar1.Repaint; If (x > (StatusBar1.canvas.TextWidth(S) - r.Left) * -1) then begin i := StatusBar1.Canvas.Font.Size div 2; //Die Hälfte der Schrifthöhe berechnen StatusBar1.Canvas.FillRect(r); StatusBar1.Canvas.TextRect(r, x, ((r.Bottom - r.Top) div 2) - i, S); dec(x); end else x := r.Right - r.Left; //Right - Left = Breite des Feldes end; procedure TForm1.FormCreate(Sender: TObject); begin // statusbar1.Canvas.Font.Color := clBlue; StatusBar1.canvas.Brush.Style := bsclear; // statusbar1.Canvas.Font.Size := 12; S := 'Es wäre gut, wenn ich das alles verstehen würde! Helft mir bitte dabei...; end; StatusBar1.Perform(SB_GETRECT, 1, integer(@r)) Hier bekomme ich auch eine Fehlermeldung. Fehlermeldung: [Fehler] Form1.pas(266): Undefinierter Bezeichner: 'SB_GETRECT' Meine Fragen wären: - was ist das SB-GETRECT, wozu dient es und wie muss es deklariert werden - warum wird @r hier so angewendet, bzw. muss so angewendet werden? Vielen Dank schon mal vorab! |
Re: StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist
Binde mal die Unit CommCtrl in den Uses ein.
Die Methode Perform kapselt die API Funktion ![]() ![]() |
Re: StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist
Vielen Dank für die Erklärungen!
(ich hatte übrigens die CommCtrl vergessen :oops:) SB_GETRECT versteh ich heute nicht mehr... :roll: Schau ich mir morgen mal an. Gute Nacht! |
Re: StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist
Hi,
bin grade dabei für mein Schulprojekt die Sache mit der Laufschrift auszuprobieren. Aber was ist eine "CommCtrl" und wie muss man die einbinden? Danke schon mal im Vorraus |
Re: StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist
"CommCtrl.pas" ist eine Delphi-Unit, die die "COmmon COntrols" der WinAPI mappt und über die VCL zur Verfügung stellt.
Jede Delphi-Unit hat eine "uses-Klausel", das sieht z.B. so aus:
Delphi-Quellcode:
Da musst du jetzt "CommCtrl" dazuschreiben.
unit Unit1.pas
interface uses Windows, Classes, Sysutils; ... |
Re: StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist
Danke für deine Antwort!
Aber das Funktioniert auch nicht! Da erscheint dann die Fehlermeldung: "Dekleration erwartet, aber "CommCtrl" gefunden. |
Re: StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist
Delphi-Quellcode:
Wenn du es so machst?! Windows, CLasses, SysUtils sind natürlcih nur Beispiele.
unit Unit1.pas
interface uses Windows, Classes, Sysutils, CommCtrl; ... |
Re: StatusBar1.Perform(SB_GETRECT, 1, integer(@r)); WAS ist
Okay, habe mein Fehler gefunden. Habe mal wieder Semikolon mit Komma vertauscht :oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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