Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid komplett selbst steuern (https://www.delphipraxis.net/117357-stringgrid-komplett-selbst-steuern.html)

Coder1990 16. Jul 2008 14:57


StringGrid komplett selbst steuern
 
Seas,

ich arbeite gerade an einem ID3Tag-Modifizier Programm und lasse mir Titel,Artist,Album (usw.) in ein TStringGrid eintragen.
Zur Umsetzung einiger Funktionen muss man im StringGrid die Zellen markieren können wie man will..
Was will ich damit sagen?
- Man soll z.b. in Col[0] Row[1],Row[3] und Row[5] markiert haben können, während in Col[4] wiederum andere Rows markiert sind
Und da ein TStringGrid nur Rechteckige Markierungsbereiche zulässt hab ich mich entschlossen nun das markieren selbst vorzunehmen.
Folgende Fragen haben sich dazu ergeben:
1. Wie kann ich den grauen Kasten entfernen den man automatisch als Markierung mitschleppt
2. Wie kann das Scrollen selbststeuern? (Scrollby verschmiert nur das Canvas und mit Refresh lande ich irgendwie wieder oben)
Mein Ansatz für 2:
Delphi-Quellcode:
procedure TFMain.SGMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
Handled:=true;
Draw.Enabled:=true; // Dieser Timer zeichnet die Markierung (kommt später noch)
SG.ScrollBy(0,-10);
{SG.refresh}
end;
3. Warum werden die Cells bei dieser Procedure nicht ausgemalt, obwohl der text gezeichnet wird?: (gelöst)
Delphi-Quellcode:
procedure TFMain.DrawTimer(Sender: TObject); // Das hier ist der Timer der die Markierung zeichnet
var
i,k:integer;
r:trect; b:string;
begin
SG.Refresh;
Draw.Enabled:=false;
SG.Brush.Color:=clHighlight;
for i:=0 to 5 do
  for k:=1 to SG.RowCount-1 do
      if SG_Sel[i,k] then
        begin
          r:=SG.CellRect(i,k);
          b:=SG.Cells[i,k];
          {SG.canvas.FillRect(r);} // <- dieser befehl war vorher (ging nicht)
          SG.Canvas.Rectangle(r); // <- hat das prob gelöst - also geht nun
          DrawText(SG.Canvas.Handle,PChar(b), length(b), r,DT_Center or DT_WordBreak);
        end;
end;
4. Wie kann ich Mausklicks auf das StringGrid abfangen ohne dass das TStringGrid darauf selbsttändig reagieren kann?
5. Hat jemand effizientere Vorschläge für die oben geposten Delphi Codes?

MfG

//edit:
6. Kann mir vll jemand die Grids.pas geben, weil ich hab Delphi 2005 und finde die im ordner nicht^^.
Möglicherweiße könnte ich nähmlich einfach das Tstringgrid ableiten und die click bzw. select proceduren mit "begin end" overriden.

toms 16. Jul 2008 17:13

Re: StringGrid komplett selbst steuern
 
Zitat:

Zitat von Coder1990
6. Kann mir vll jemand die Grids.pas geben, weil ich hab Delphi 2005 und finde die im ordner nicht^^.
Möglicherweiße könnte ich nähmlich einfach das Tstringgrid ableiten und die click bzw. select proceduren mit "begin end" overriden.

Hallo,

zu 6: Den Quelltext einer Komponente brauchst du nicht, wenn du sie ableiten möchtest.

Coder1990 16. Jul 2008 18:27

Re: StringGrid komplett selbst steuern
 
ich habe nie geschrieben, dass ich die unit zum ableiten benötigen würde ;)
ich wollte bloß die privaten procedures bzw. funktionen erfahren (deren namen) damit ich diese auch overriden kann :D

Hansa 16. Jul 2008 20:02

Re: StringGrid komplett selbst steuern
 
Dann gebe so was ein : StringGrid1. Der Punkt dürfte das gesuchte liefern. Aber richtig eingeben. :mrgreen:

Coder1990 16. Jul 2008 20:13

Re: StringGrid komplett selbst steuern
 
also irgendwie zeigt der bei mir beim "." setzen nur die in PUBLIC eingetragenen functions, procedures usw.
aber wie ich vll schon gesagt habe will ich die PRIVATE procedures modifizieren
(schätze mal nicht dass die internen funktionen zum "graue box" erstellen oder so public sind -.-)

// btw könnte sich jemand auch mal die anderen fragen anschauen :zwinker:

Hansa 16. Jul 2008 20:41

Re: StringGrid komplett selbst steuern
 
Zitat:

Zitat von Coder1990
aber wie ich vll schon gesagt habe will ich die PRIVATE procedures modifizieren
(schätze mal nicht dass die internen funktionen zum "graue box" erstellen oder so public sind -.-)
...
ich habe nie geschrieben, dass ich die unit zum ableiten benötigen würde ;)
ich wollte bloß die privaten procedures bzw. funktionen erfahren (deren namen) damit ich diese auch overriden kann :D

Warum heißt das wohl "private" ? Warum heißt es ableiten, überschreiben etc. und nicht "modifizieren" ? Das ist OOP und da benutzt man Vererbung, inherited etc. Und das private ist genau dazu da, das eben nicht durchgängig möglich zu machen.

gut, zu 3. noch : wo ist denn das FillRect ? :zwinker: Ich sehe da nur, dass ein Text mit Drawtext angezeigt werden soll und die Zelle ansonsten so bleibt wie sie ist. Das ist zumindest kein Delphi-Bug. :mrgreen:

P.S.: du tust dir selber keinen Gefallen damit, 5 Fragen in eine zu packen.

Coder1990 16. Jul 2008 20:55

Re: StringGrid komplett selbst steuern
 
Zitat:

Zitat von Hansa
Zitat:

Zitat von Coder1990
aber wie ich vll schon gesagt habe will ich die PRIVATE procedures modifizieren
(schätze mal nicht dass die internen funktionen zum "graue box" erstellen oder so public sind -.-)
...
ich habe nie geschrieben, dass ich die unit zum ableiten benötigen würde ;)
ich wollte bloß die privaten procedures bzw. funktionen erfahren (deren namen) damit ich diese auch overriden kann :D

Warum heißt das wohl "private" ? Warum heißt es ableiten, überschreiben etc. und nicht "modifizieren" ? Das ist OOP und da benutzt man Vererbung, inherited etc. Und das private ist genau dazu da, das eben nicht durchgängig möglich zu machen.

oben wurde gesagt ich soll mit stringgrid1. durchgucken soll - da werden mir nunmal nur die in public deklarierten angezeigt
(oder habt ihr gemeint dass ich in meiner neuen unit mit der ableitung irgendwie durchgucken soll? -> wenn ja weiß ich nicht genau wo ich dies tun soll damit ich privates angezeigt krieg). Versteht denn keiner was ich meine?

Zitat:

Zitat von Hansa
gut, zu 3. noch : wo ist denn das FillRect ? :zwinker: Ich sehe da nur, dass ein Text mit Drawtext angezeigt werden soll und die Zelle ansonsten so bleibt wie sie ist. Das ist zumindest kein Delphi-Bug. :mrgreen:

punkt 3 ist schon gelöst ;) hab doch ein "// hat das prob gelöst" drangemacht ;);)

Zitat:

Zitat von Hansa
P.S.: du tust dir selber keinen Gefallen damit, 5 Fragen in eine zu packen.

hmm sind halt alle zum thema stringgrid und ich hab mir halt gedacht da kommt so ein ub3r 1337 pr0 der mir alle löst :P

mach ich nächstes mal halt 6 threads auf xD (achtung ironie^^)

MfG

Diamondback2007 16. Jul 2008 21:06

Re: StringGrid komplett selbst steuern
 
Das Problem das du hast ist folgendes.
Wenn eine Methode beim Stringgrid nicht als
Delphi-Quellcode:
virtual
markiert ist kannst du es auch nicht überschreiben...

Coder1990 16. Jul 2008 21:19

Re: StringGrid komplett selbst steuern
 
sowas in der art hab ich mir auch schon gedacht ...
hat jemand ne idee, wie ich das machen kann?

Diamondback2007 16. Jul 2008 21:58

Re: StringGrid komplett selbst steuern
 
evtl ein anderes Freewaregrid benutzen, da kannst du dann auch am Code rumbasteln. Guck doch einfach mal auf Torry.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.
Seite 1 von 2  1 2      

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